示例输入参数是一个txt文件,例如:
0145 2145 4578 47896 45 78841 1249 24873
(有多行,但这里没有显示)
问题是:
>我不知道如何将ARG [0]作为数组
>我想把输入文件的每个字符串作为单个字符串,换句话说,line1 0145 2145将不是一个字符串,它将是两个不同的字符串,通过空格分隔.
解决方法
如果您为程序提供了一个文件名以用作命令行的输入,请将其从ARGV数组中取出并将其作为文件句柄打开:
my $filename = $ARGV[0]; open(my $filehandle,'<',$filename) or die "Could not open $filename\n";
一旦有了文件句柄,就可以使用while循环遍历文件的每一行. chomp从每行的末尾开始使用该新行字符.使用split将基于空格分割每一行.这将返回一个数组(我的代码中的@linearray),其中包含该行中数字的列表.然后我将我的线阵推到我的@resultarray的末尾.
my @resultarray; while(my $line = <$filehandle>){ chomp $line; my @linearray = split(" ",$line); push(@resultarray,@linearray); }
并记得添加
use warnings; use strict;
在您的perl文件的顶部,如果您的代码中出现任何问题,可以帮助您.
只是为了说明如何处理程序的不同输入.以下命令:
perlfile.pl < inputfile.txt
将获取inputfile.txt的内容并将其传递给STDIN文件句柄.然后,您可以使用此文件句柄来访问inputfile.txt的内容
while(my $line = <STDIN>){ # do something with this $line }
但是你也可以通过在执行命令之后放置它们来为你的程序提供一些文件名来读取:
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 }
注意我这次使用shift来获取数组@ARGV中的下一个元素.有关班次的更多详细信息,请参见perldoc.还有关于open的更多信息.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。