#!/usr/bin/perl
use strict;
use warnings;
use warnings;
use 5.010;
my @names = ("RD", "HD", "MP");
my $flag = 0;
my $filename = 'Sample.txt';
if (open(my $fh, '<', $filename))
{
while (my $row = <$fh>)
{
foreach my $i (0 .. $#names)
{
if( scalar $row =~ / \G (.*?) ($names[$i]) /xg )
{
$flag=1;
}
}
}
if( $flag ==1)
{
say $filename;
}
$flag=0;
}
这里我从一个文件中读取内容并与数组值进行比较,如果文件内容与数组值匹配,我只显示文件。以同样的方式我如何从不同的目录访问不同的文件,并将数组值与相同的数据进行比较?
答案 0 :(得分:4)
问:如何访问其他文件?
A:指定不同的文件名。
顺便说一下:如果在Perl中使用标志进行循环控制,那么你做错了什么。您可以指定这是循环的last
迭代(在C: break 中),或者您想要开始next
迭代。您可以标记循环,以便您可以立即打破任意数量的循环:
#!/usr/bin/perl
use 5.010; use warnings;
my @names = qw(RD HD MP);
# unpack command line arguments
my ($filename) = @ARGV;
open my $fh, "<", $filename or die "Oh noes, $filename is bad: $!";
LINE:
while (my $line = <$fh>) {
NAME:
foreach my $name (@names) {
if ($line =~ /\Q$name\E/) { # \QUOT\E the $name to escape everything
say "$filename contains $name";
last LINE;
}
}
}
其他亮点:
foreach
循环和\G
断言然后,您可以将脚本执行为perl script.pl Sample.txt
或perl script.pl ../another.dir/foo.bar
或其他任何内容。
答案 1 :(得分:0)
您可以在Perl 5.10中使用~~运算符。 不要忘记选择尾随空格。
#!/usr/bin/perl
use 5.010;
use strict;
use warnings;
my @names = ('RD', 'HD', 'MP');
my $other_dir = '/tmp';
my $filename = 'Sample.txt';
if ( open( my $fh, '<', "$other_dir/$filename" ) ) {
ROW:
while ( my $row = <$fh> ) {
chomp $row; # remove trailing \n
if ( $row ~~ @names ) {
say $filename;
last ROW;
}
}
}
close $fh;