我的输出数组合并成一个数组

my output array to merge into just one array

我的示例代码用于显示 source_dir_ref.txt 中列出的目录列表,但我需要将其合并到一个数组中

#! /usr/bin/env perl
use feature qw(say);
use strict;
use warnings;

use Data::Dumper;
use Getopt::Long;

my $infile = 'source_dir_ref.txt';
my $file = $ARGV[0];

GetOptions ("infile=s" => $file ) or die("Error in command line arguments\n");

open(DATA, $infile) or die "Couldn't open file $file";

while(my $line = <DATA>) {
         chomp($line);
         #say "$line";
         my @listdir = $line;
         say Dumper \@listdir;

}

我的结果 运行 我的代码

$VAR1 = [
          '/archives/data/mefab/STAGING/PRODUCTION'
        ];

$VAR1 = [
          '/archives/data/bkfb/STAGING/PRODUCTION'
        ];

$VAR1 = [
          '/archives/data/szast/STAGING/PRODUCTION'
        ];

$VAR1 = [
          '/archives/data/cpast/STAGING/PRODUCTION'
        ];

我的objective是把这个数组合并成一个数组。

@sourcedirs = ('/archives/data/mefab/STAGING/PRODUCTION', '/archives/data/bkfb/STAGING/PRODUCTION', '/archives/data/szast/STAGING/PRODUCTION','/archives/data/cpast/STAGING/PRODUCTION');

您可以在循环外创建数组并push(追加)新元素到它。

my @sourcedirs;
while (my $line = <DATA>) {
     chomp($line);
     push @sourcedirs, $line;
}

您还可以将文件句柄分配给一个数组,并在读取所有行后 chomp:

use strict;
use warnings;

open my $F, '<', $file or die "Cannot read $file: $!";
my @sorcedirs = <$F>;
close $F;
chomp(@sorcedirs);
print join ", ", @sorcedirs;

或者,使用 File::Slurp:

use File::Slurp;
my @sourcedirs = read_file($file);

你所要做的就是修复这一行。

my @listdir = $line;

push @listdir, $line;

然后在循环之后做chomp @listdir.

更简单的方法是:

@listdir = <DATA>;
chomp @listdir;

谢谢。