The OpenNET Project
 
Поиск (ключи):    ПРОГРАММЫ СТАТЬИ СОВЕТЫ ФОРУМ
  WIKI НОВОСТИ (+) MAN'ы ДОКУМЕНТАЦИЯ

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"perl и кавычки "
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Perl)
Изначальное сообщение [ Отслеживать ]

"perl и кавычки "  +/
Сообщение от L0n3R4ng3r (ok) on 13-Фев-10, 23:07 
Доброго времени суток.

Столкнулся с такой проблемой, пытаюсь выкусить кусок из строки и вставить ее в переменую. Но перл вставляет лишний апостроф в переменую который не видный при ввыводе, но при операциях типа eq с аналогичным значением выдает false :(

вот вывод дебага:


monitoring::GetLogStringHash1(monitoring.pm:277):
277:            if ( $temp_hash->{type} eq "bin" or $temp_hash->{type} eq "char" ) {
  DB<1>
monitoring::GetLogStringHash1(monitoring.pm:278):
278:                my ($offset,$len);
  DB<1>
monitoring::GetLogStringHash1(monitoring.pm:279):
279:                if ($temp_hash->{value} =~ /(\d+)-(\d+)/){
  DB<1>
monitoring::GetLogStringHash1(monitoring.pm:280):
280:                    $offset = $1;
  DB<1>
monitoring::GetLogStringHash1(monitoring.pm:281):
281:                    $len = $2-$offset;
  DB<1>
monitoring::GetLogStringHash1(monitoring.pm:283):
283:                $result{$hashes} = substr($string,$offset,$len);
  DB<1>
monitoring::GetLogStringHash1(monitoring.pm:291):
291:        $deb = mon_debug::PrintPerfTime("GetLogStringHash",'end',$deb);
  DB<1> y temp_hash
%result = (
   'error_type' => 'I'
   'name' => 'JafCache                      '
)
  DB<2> y string
$string = 'JafCache                      :0705 232956.951:I:<CACHE>     :SETTER: Cache mbean max cached entries [5]'


'JafCache

аналогичные переменые выкусывает нормально, екранируя их '':
DB<1> y result string
$string = 'JafCache                      :0705 232956.951:I:<CACHE>     :SETTER: Cache mbean max cached entries [5]'
%result = (
   'error_type' => 'I'
)

перепробывал уже все и пытался удалять все ' в переменой и выкусывать не с нолевого а с первого символа. Как с этим бороться?

Заранее спасибо.

Высказать мнение | Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "perl и кавычки "  +/
Сообщение от ACCA (ok) on 15-Фев-10, 07:35 
[поток сознания поскипан]

Сделай короткий пример - данные, которые ты парсишь, минимальный кусок кода, который делает не то, что нужно и на словах скажи что ты хочешь получить. Например:

while (<DATA>) {
    chomp;
    my @a = split /\s*:\s*/;
    print join(',', @a);
}

__DATA__

JafCache :0705 232956.951:I:<CACHE>     :SETTER: Cache mbean max cached entries [5]

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

2. "perl и кавычки "  +/
Сообщение от L0n3R4ng3r (ok) on 15-Фев-10, 13:55 
>[оверквотинг удален]
>
>while (<DATA>) {
>    chomp;
>    my @a = split /\s*:\s*/;
>    print join(',', @a);
>}
>
>__DATA__
>
>JafCache :0705 232956.951:I:<CACHE>     :SETTER: Cache mbean max cached entries [5]

вот код. посдний pring для того чтобы прогама сразу не закрылась в дебаге
#!/usr/local/bin/perl

my $str="JafCache                      :0705 232956.951:I:<CACHE>     :SETTER: Cache mbean max cached entries [5]";

my $offset=0;
my $len=30;
my $value=substr($str,$offset,$len);
print "$value\n";
print "false" if ($value ne 'JafCache');
print "df";


вот дебаг:
main::(qwe:3):  my $str="JafCache                      :0705 232956.951:I:<CACHE>     :SETTER: Cache mbean max cached entries [5]";
  DB<1> n
main::(qwe:5):  my $offset=0;
  DB<1>
main::(qwe:6):  my $len=30;
  DB<1>
main::(qwe:7):  my $value=substr($str,$offset,$len);
  DB<1>
вот принт на аутпуте у нас JafCache:
main::(qwe:8):  print "$value\n";
  DB<1>
JafCache
main::(qwe:9):  print "false" if ($value ne 'JafCache');
смотрим что у нас внутри переменой:
  DB<1> y value
$value = 'JafCache                      '
вот такое
  DB<2>
main::(qwe:10): print "df";
  DB<2> false

собственно пока писал и нашел ошибку которую не мог долго заметить - в переменое еще куча пробелов в конце :)
$value =~ s/\s//g;
все

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема


АКЦИЯ! ПОДПИШИСЬ на журнал Linux Format до 31 января 2012 года и выиграй СУПЕРПРИЗ!

Журнал "Linux Format" (Линукс Формат)- Единственный в России и странах СНГ журнал на русском языке, посвящённый Linux и свободному ПО. Журнал для IT-директоров, IT-менеджеров, программистов, системных администраторов, учителей школ и преподавателей ВУЗов и всех пользователей ПК. В каждом выпуске: Новости индустрии OpenSource, обзоры новинок свободного ПО, обучающие и методические статьи.

Каждый, кто оформит подписку, получает бонус- объёмные наклейки на системный блок и подарки: с одним из первых выпусков журнала в 2012 году- диск с архивом номеров за 2005-2011 г.г. и ежемесячно электронную версию журнала в pdf-формате.

Подробнее о проведении акции вы можете прочитать на странице сайта.


  Закладки на сайте
  Проследить за страницей
Created 1996-2012 by Maxim Chirkov  
ДобавитьРекламаВебмастеруГИД  
RUNNet TopList