我需要检测文件中的第一个字符是否是等号(=)并显示行号。我应该如何编写if语句?
$i=0;
while (<INPUT>) {
my($line) = $_;
chomp($line);
$findChar = substr $_, 0, 1;
if($findChar == "=")
$output = "$i\n";
print OUTPUT $output;
$i++;
}发布于 2010-11-20 01:35:09
惯用的perl会使用一个正则表达式(^表示行的开头)加上一个可怕的内置变量,它恰好表示“文件中的行”:
while (<INPUT>) {
print "$.\n" if /^=/;
}另请参阅perldoc -v '$.'
发布于 2010-11-20 01:34:30
使用$findChar eq "="。在Perl中:
==和!=是数值比较。它们会将两个操作数都转换为number.eq,而ne是字符串比较。它们会将两个操作数都转换为字符串。是的,这很令人困惑。是的,我仍然在写==,我指的是eq 一直在写。是的,我也花了很长时间才发现我的错误。
发布于 2010-11-20 02:37:17
$i中跟踪输入行号。Perl在perlvar中记录了各种内置变量。其中一些是非常有用的,比如$.,while循环的主体中使用了my($line) = $_;。取而代之的是,避免使用$_,而是像在while ( my $line = <$input> )中那样直接分配给$line。INPUT这样的无字文件句柄是包全局的。除了DATA文件句柄之外,您最好使用lexical filehandles来适当地限制您的帖子的范围,在__DATA_部分包含示例数据,这样其他人就可以复制、粘贴和运行您的代码,而无需进一步的工作。记住这些注释后,您可以使用以下命令打印所有不以=开头的行:
#!/usr/bin/perl
use strict; use warnings;
while (my $line = <DATA> ) {
my $first_char = substr $line, 0, 1;
if ( $first_char ne '=' ) {
print "$.:$first_char\n";
}
}
__DATA__
=
=
a
=
+然而,我倾向于这样写:
while (my $line = <DATA> ) {
# this will skip blank lines
if ( my ($first_char) = $line =~ /^(.)/ ) {
print "$.:$first_char\n" unless $first_char eq '=';
}
}https://stackoverflow.com/questions/4227714
复制相似问题