在Perl中,我需要读取包含0或1的.conf文件。如果值为1,我需要执行if语句中的任何内容。这就是我现在所拥有的:
open(CONF, "/var/web/onhit.conf");
if(<CONF>) {
print "Hello World!";
}
close(CONF);
if语句的内容总是评估,即使.conf文件包含0.我知道文件读取是正确的,因为此代码可以正确读取文件:
open(CONF, "/var/web/onhit.conf");
print <CONF>;
close(CONF);
如果文件包含1,则打印1,反之亦然。有谁知道我的第一个片段有什么问题?对不起,我是Perl的n00b。 : - )
答案 0 :(得分:6)
编辑:显然,您的帖子的真值已被反转,您的意思是说if()语句总是执行。这是有道理的。会发生什么是<CONF>
读取字符串"1\n"
或"0\n"
,而不是数字1
或0
。尾部换行符会阻止"0"
评估为false,因此您需要chomp()
它(或使用int()
函数,如其他帖子中所述)。无论哪种方式都应该有效。
(请注意,遗憾的是,chomp()
不会返回chomp()
ed字符串,而是删除了多少个字符,所以你不能只说if(chomp(my $tmp = <CONF>))
并完成它。)
无论如何,这就是我所做的:
open(CONF, "/var/web/onhit.conf");
chomp(my $tmp = <CONF>);
if($tmp) {
print "Hello, world!\n";
}
close CONF;
一些建议:
open()
的三参数形式,或者至少在文件名前指定"<"
。$conf
),而不是使用较旧的,笨拙的文件句柄形式(CONF
)。这是我写的代码:
open my $conf, "<", "/var/web/onhit.conf";
chomp(my $tmp = <$conf>);
if($tmp) {
print "Hello, world!\n";
}
close $conf;
答案 1 :(得分:1)
您只需使用int函数将字符串转换为整数。
open(CONF, "/var/web/onhit.conf");
if(int(<CONF>)) {
print "Hello World!";
}
close(CONF);
答案 2 :(得分:1)
或者您可以在比较中包含新行:
if (<CONF> =~ /^1$/) {
}