Доброго времени суток.Столкнулся с такой проблемой, пытаюсь выкусить кусок из строки и вставить ее в переменую. Но перл вставляет лишний апостроф в переменую который не видный при ввыводе, но при операциях типа 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'
)перепробывал уже все и пытался удалять все ' в переменой и выкусывать не с нолевого а с первого символа. Как с этим бороться?
Заранее спасибо.
[поток сознания поскипан]Сделай короткий пример - данные, которые ты парсишь, минимальный кусок кода, который делает не то, что нужно и на словах скажи что ты хочешь получить. Например:
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]
>[оверквотинг удален]
>
>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/perlmy $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;
все