perl 如何在数组中存储选定的信息?

ocebsuys  于 2023-05-01  发布在  Perl
关注(0)|答案(1)|浏览(111)

我有一个文件要读。

  • file1.txt* 包含:
information1
information2
information3
information4
information5
information6
information7

我会在终端上写命令

perl scripts.pl --select information3

所以结果将取information3和之前的值。预期结果

information3 
information2
information1

如果我写了命令。

perl scripts.pl --select information6

预期结果将是:

information6
information5
information4
information3
information2
information1

当前代码:

use Getopt::Long qw(GetOptions);;
use Switch;

my $read_file = 'file1.txt';
my $info_name;
my @name;
my $select;

GetOptions( "select|t=s"=> \$select, );

open(READ_FILE,"<", $read_file) || die "Cannot open file $read_file to Read! - $!";

while (<READ_FILE>) {
my $info_name = $_;
if ($info_name =~ m/$select/) {
    $info_name = $_;
    push (@name,($info_name));
    }
}
close(READ_FILE);
print "@name\n";

命令:

perl scripts.pl --select information3

结果:

information3

现在我只设法得到什么选择只。结果应显示:

information3 
information2
information1
mnemlml8

mnemlml81#

看看这段代码是否有助于解决您的问题。

use strict;
use warnings;
use Getopt::Long qw(GetOptions);

my $select;
my $flag = 0;
my @data;

GetOptions( "select|t=s"=> \$select, );

open (my $fh, '<', "test.txt") or die "Cannot open a file: $!";

while (my $line = <$fh>){
        chomp $line;
        push @data, $line;
        if($line =~ /^$select$/){
                $flag = 1;
                last;
        }
}
close $fh;
if(!$flag){
        print "No match found..\n";
} else {
        print join("\n", reverse @data)."\n";
}

相关问题