在Perl中读取输入文件并将其放入带有空格分隔符的数组中

在Perl中读取输入文件并将其放入带有空格分隔符的数组中,perl,input,delimiter,argv,Perl,Input,Delimiter,Argv,我试图获取一个带有@ARGV数组的输入文件,并用perl将其所有元素写入一个带有分隔符空间的数组 示例输入参数是一个txt文件,例如: 0145 2145 4578 47896 45 78841 1249 24873 (有多行,但此处未显示) 问题是: 我不知道如何将ARG[0]作为一个数组的示例 我想把输入文件中的每个字符串作为单个字符串,换句话说,行1 0145 2145将不是一个字符串,而是两个不同的字符串,用空格分隔 我想这就是你想要的。此代码中的@resultarray将包含一个数字

我试图获取一个带有
@ARGV
数组的输入文件,并用perl将其所有元素写入一个带有分隔符空间的数组

示例输入参数是一个txt文件,例如:

0145 2145
4578 47896
45 78841
1249 24873
(有多行,但此处未显示) 问题是:

  • 我不知道如何将ARG[0]作为一个数组的示例
  • 我想把输入文件中的每个字符串作为单个字符串,换句话说,行1 0145 2145将不是一个字符串,而是两个不同的字符串,用空格分隔

  • 我想这就是你想要的。此代码中的
    @resultarray
    将包含一个数字列表

    如果要为程序指定一个文件名作为命令行的输入,请将其从ARGV数组中取出并作为文件句柄打开:

    my $filename = $ARGV[0];
    open(my $filehandle, '<', $filename) or die "Could not open $filename\n";
    
    记住要加上

    use warnings;
    use strict;
    
    在perl文件的顶部,以便在代码中出现任何问题时提供帮助


    只是为了澄清你如何处理你的程序的不同输入。以下命令:

    perlfile.pl < inputfile.txt
    
    但您也可以通过将文件名放在执行命令之后,为程序指定一些要读取的文件名:

    perlfile.pl inputfile1.txt inputfile2.txt
    
    这些文件名将被读取为字符串,并放入@ARGV数组中,以便该数组如下所示:

    @ARGV:
        [0] => "inputfile1.txt"
        [1] => "inputfile2.txt"
    
    因为这些只是文件名,所以在访问文件内容之前,需要用perl打开文件。因此,对于inputfile1.txt:

    my $filename1 = shift(@ARGV);
    open(my $filehandle1, '<', $filename1) or die "Can't open $filename1";
    
    while(my $line = <$filehandle1>){
        # do something with this line
    }
    
    my$filename1=shift(@ARGV);
    
    打开(my$filehandle1,'非常感谢,但我想看到数组的元素,所以当我写foreach$value(@resultarray){print$value;}时,它会给出全局符号“$value”之类的错误在c:\users处需要显式的包名……我如何打印元素以及您的代码,错误是打印时出现的错误是由
    使用警告
    pragma造成的。它要求您在开始时用包名定义所有变量。因此,在您的情况下,您必须编写
    我的$value
    f
    $value
    。以这种方式编写perl代码是一个非常好的主意,因为一旦习惯了它,调试程序的时间就会少很多。另一个错误是因为您需要使用命令行表单
    test1.pl inputfile.txt
    ,而不是
    test1.pl
    。现在使用
    就可以了。谢谢您非常感谢,这正是我想要的
    
    @ARGV:
        [0] => "inputfile1.txt"
        [1] => "inputfile2.txt"
    
    my $filename1 = shift(@ARGV);
    open(my $filehandle1, '<', $filename1) or die "Can't open $filename1";
    
    while(my $line = <$filehandle1>){
        # do something with this line
    }