【发布时间】:2019-09-17 22:04:50
【问题描述】:
我正在尝试从BEGIN 块中的文本文件中获取一些特定模式的数据,并将它们打印到END 块中,如下所示:
perl -0777wnE'
BEGIN{
while(/<mark>(.*?)<\/mark>/g){
$hw=$1;
$seen{$hw}++;
}
}
END{
for $key (keys %seen){
say "$key";
}
}
' "demo.txt" > "demo2.txt"
但它不会在 demo2.txt 文件中打印任何内容,并且会给出以下警告:
在 -e 第 3 行的模式匹配 (m//) 中使用未初始化的值 $_。
但是,如果我将 while 块放在 BEGIN 块之外,如下所示:
perl -0777wnE'
while(/<mark>(.*?)<\/mark>/g){
$hw=$1;
$seen{$hw}++;
}
END{
for $key (keys %seen){
say "$key";
}
}
' "demo.txt" > "demo2.txt"
然后得到预期的结果。
【问题讨论】:
-
摆脱
n开关以供初学者使用