我有一个从 UNIX 命令提示符运行的 Perl 脚本。该脚本询问几个用户输入,其中之一是要从中收集特定数据的 ASCII 文档。然后脚本读取文档并对文档执行多次检查,然后将特定数据输出到另一个文件。
我遇到的问题是,如果我更新脚本,比如添加 – print “printprintprint\n\n”; 在 while () 循环中,更新“printprintprint”不会显示在 UNIX 窗口中,然后下次我运行脚本时。使此或循环中的任何更改生效的唯一方法是重命名脚本或将脚本移动到另一个目录。如果我将脚本重命名为原始名称,即使我对脚本进行了更多更改,也会出现原始输出并且不会出现“printprintprint”。我将尝试提供一个简单的示例:脚本名称:doc_rpt.pl
my $action;
use strict;
use warnings;
while (<Infile>)
{
print “Perform action (Yes or No)?: “;
$action = <STDIN>;
chomp ($action);
if (lc($action) ne “yes")
{
if (lc($action) ne “y”)
{$action = “No”;}
else
{$action = “Yes”;}
}
else
{$action = “Yes”;}
print “Result: $action”;
}
close Infile;
如果我运行脚本并回答“是”,屏幕上显示的结果将是“是”。现在如果我要添加print “printprintprint\n\n”;
my $action;
use strict;
use warnings;
while (<Infile>)
{
print “Perform action (Yes or No)?: “;
$action = <STDIN>;
chomp ($action);
print “printprintprint\n\n”;
if (lc($action) ne “yes)
{
print “printprintprint\n\n”;
if (lc($action) ne “y”)
{
print “printprintprint\n\n”;
$action = “No”;
}
else
{
print “printprintprint\n\n”;
$action = “Yes”;}
}
else
{
print “printprintprint\n\n”;
$action = “Yes”;
}
print “Result: $action”;
}
close Infile;
保存更改后,如果我再次运行脚本,无论我创建多少,我都不会在 UNIX 屏幕上看到“printprintprint”。我必须重命名脚本(例如从 doc_rpt.pl 到 doc_rpt_v2.pl)才能使更改生效。if/else 动作或循环中的任何其他动作也是如此。我每次都必须输入“是”。除非我重命名脚本,否则“是”或“y”将导致“否”值。将脚本重命名为以前未使用的名称后,脚本将正常运行,直到我进行另一次更改。然后整个过程重复。
看起来原始脚本和脚本读取的信息被留在缓冲区中,没有被清空或覆盖。如果是这种情况,我该如何清空缓冲区?我确实有关闭 Outfile 和 Close Infile。我应该使用 $| 或类似清空缓存的东西?“Close Infile”之后是否缺少退出?有理由吗?