0

我有一个简单的问题。如何让 perl 读取文件,搜索特定单词,然后如果找到匹配项,我想将该行的其余部分打印到单个变量中。

我希望搜索的 ascii 文件(称为“region_list”)包含 3 行:

夏威夷 40 5 -140 -180

萨摩亚 -5 -25 -165 165

太平洋 70 -65 290 110

这是我到目前为止的代码,但它似乎不起作用:

#!/usr/bin/perl -w
#
# Required Libraries
use Date::Calc qw(:all);
use Date::Manip;
use Math::Trig;
use warnings;
use Time::Local;
use POSIX 'strftime';
use lib '/usr/bin';
use Cwd qw();

my @region = ("hawaii", "samoa", "pacific");

open my $listreg1, "$BIN_DIR/region_list" or die "Could not open: $!";

  ($reg2,$max_lat, $min_lat, $max_lon, $min_lon) = split(" ",$listreg1);


   if ($region eq $reg2) {
            print "LUCREG $region $reg2 $max_lat, $min_lat, $max_lon, $min_lon \n";
    }



close $listreg1;
4

1 回答 1

1

在 Perl 5.10 或更高版本中,我们可以使用智能匹配 (~~) 运算符将值的存在匹配到数组中

open my $listreg1, '<', "$BIN_DIR/region_list" or die "Could not open: $!";

while( my $line = <$listreg1> ) {
  chomp $line;
  ($reg2, $max_lat, $min_lat, $max_lon, $min_lon) = split/ +/, $line;

   if( $reg2 ~~ \@region ) {
            print "LUCREG $region $reg2 $max_lat, $min_lat, $max_lon, $min_lon\n";
   }
}

close $listreg1;

请注意,正如@Joel 所说,智能匹配运算符将在 5.18 中被标记为实验性的,因此使用 CPAN 模块(如List::MoreUtils或简单的 grep)可能是更好的选择。

于 2013-05-08T21:01:18.777 回答