奇怪的PERL脚本

来源:百度知道 编辑:UC知道 时间:2024/06/24 13:43:57
下面的Perl脚本运行后,出现很奇怪的结果。。。望大牛解释
#!/usr/bin/perl
use strict;
open(FILE_record, "./bbb");
while(chomp(my $input=<FILE_record>))
{
if($input =~ /Subject.*/g)
{
print "1\n";
if($input =~ /Subject.*/g)
{
print "2\n";
}
else
{
print "3\n";
}
}
}
close(FILE_record);

bbb文件中保存“Subject”字符

几个问题你明白了这个脚本就ok了。
1、chomp的问题:
你的chomp位置不对,应该改为:
while(my $input=<FILE_record>)
{
chomp($input);
if($input =~ /Subject.*/g)
{
。。。
否则在bbb中最后一行没有回车的情况下(bbb的内容为第一行为Subject,第二行是空行就没有问题了),你的脚本会得不到任何结果。将chomp改好位置后,程序执行结果为:
1
3
2、你的问题就是:你认为结果应该是:
1
2
对吧?
其实,perl在运行前,perl解释器会对perl脚本做优化,由于你的两个if语句前半部分是一样的,所以第二个if部分被优化时删除了。就是说:
原来的:

if($input =~ /Subject.*/g)
{
print "1\n";
if($input =~ /Subject.*/g)
{
print "2\n";
}
else
{
print "3\n";
}
被优化为:

if($input =~ /Subject.*/g)
{
print "1\n";
}
else
{
print "3\n";
}
所以在写perl时要注意分支语句不要出现一样的判断条件,否则就会在perl运行前被优化掉。(注意perl的优化是有规律的)
实验一个:
#!/usr/bin/perl
use strict;
open(FILE_record, "bb.txt")||die "can'not \n";