2013-09-21 2 views
0

я проблема с моим PERL скрипт:ошибка: Имя "главная :: Outfile" используется только один раз

use strict; 
use warnings; 
use autodie; 

my $out = "result2.txt"; 
open outFile, ">$out" or die $!; 
my %permitted = do { 
    open my $fh, '<', 'f1.txt'; 
    map { /(.+?)\s+\(/, 1 } <$fh>; 
}; 

open my $fh, '<', 'f2.txt'; 
while (<$fh>) { 
    my ($phrase) = /(.+?)\s+->/; 
    if ($permitted{$phrase}) { print outFile $phrase ;} 
} 

close outFile; 

Ошибка:

Name "main::outFile" used only once: possible typo at teeest.pl line 14. 

Любая идея, пожалуйста?

спасибо

ответ

3

print имеет очень специальный синтаксис. Без use autodie,

print outFile $phrase; 

означает

print *outFile $phrase; 

Но замена use autodie;print создает не вполне может воспроизвести это. Это, вероятно, заканчивается время

print "outFile" $phrase; 

, которые до сих пор делает правильные вещи, но скрывает использование outFile от «используется только один раз» предупреждение проверки.

Предупреждение является ложным и безвредным в этом случае. Вы можете предотвратить его испускание, избегая необоснованного использования глобальной переменной.

open my $outFile, ">$out" or die $!; 
print $outFile $phrase; 
close $outFile; 
+0

Спасибо, но проблема с «my ($ phrase) = /(.+?)\s+->/;" содержание - это только сегмент слова до «->», но я хочу, чтобы он печатал всю строку «привет всем -> привет (0,5)» – Poisson

+0

Вы, кажется, забыли упомянуть об этом. Строка, с которой вы сопоставляетесь, - '$ _'. Это то, что вы должны печатать, если хотите вывести всю строку. – ikegami

Смежные вопросы