У меня проблемы с поиском проблемы с моей программой.Получение ошибки:
Use of uninitialized value in substitution (s///)
Я понимаю, что об этом уже спрашивали, но это не помогло мне.Я понимаю, что $1
может быть унифицированным, но мне было интересно, если вы, ребята, могли бы помочь мне выяснить, почему?
Вот проблемная часть кода:
$one_match_ref->{'sentence'} = $1 if ($line =~ /^Parsing \[sent. \d+ len. \d+\]: \[(.+)\]/);
$one_match_ref->{'sentence'} =~ s/, / /g;
Редактировать:объявил $one_match_ref->{'sentence'}
примерно так:
my $sentence;
$one_match_ref = {
chapternumber => $chapternumber_value,
sentencenumber => $sentencenumber_value,
sentence => $sentence, ##Get from parsed text: remove commas
grammar_relation => $grammar_relation_value, ##Get from parsed text: split?
arg1 => $argument1, ##Get from parsed text: first_dependencyword
arg2 => $argument2 ##Get from parsed text: second_dependencyword
};
Но ни одной из этих переменных не присвоено ничего.
Мои попытки:
A. Если я поставлю: if( defined (one_match_ref->{'sentence'}))
после s ///, это работает.Но это громоздко, и, кажется, избегает проблемы, а не решает ее.
В последний раз, когда я использовал это исправление, это произошло из-за того, что в моем цикле произошла ошибка «off-by-one», на этот раз я не думаю, что это так.
B. Если я заявляю: my $sentence = '';
Он печатает, но с большим количеством пустых строк между ними.Как я могу устранить их?
РЕДАКТИРОВАТЬ: В интересах и эффективности: лучше ли использовать сплит, чтобы получить то, что я хочу?
Заранее спасибо за любую помощь или совет.Дайте мне знать, если вам нужен пример формата файла.