我想這是你想要的。此代碼中的@resultarray
將最終保存一個數字列表。
如果你給你的程序文件名作爲命令行輸入來使用,把它關閉了argv數組並將其作爲一個文件句柄:
my $filename = $ARGV[0];
open(my $filehandle, '<', $filename) or die "Could not open $filename\n";
一旦你的文件句柄就可以使用while循環遍歷文件的每一行。 chomp
將每行的結尾處的新行字符取出。使用split
根據空格分隔每行。這將返回一個數組(在我的代碼中爲@linearray
),其中包含該行內的數字列表。到我@resultarray
年底我再push
我的線陣列。
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的更多信息。
非常感謝你,但我希望看到數組中的元素,所以當我寫 的foreach $值(@resultarray) { 打印($值); } 然後它給像 全局符號「$值」的錯誤,需要明確包名在C:\用戶...... 如何打印元素 – 2012-03-11 14:17:41
,也爲你的代碼,錯誤的是 http://imageshack.us/photo/my-images/341/asdasdfasfagfq.png/ – 2012-03-11 14:27:11
打印時出現的錯誤是'use warnings'編譯指示的結果。它要求你在開始時用包名定義所有變量。所以在你的情況下,你必須寫'我的$ value'而不是'$ value'。以這種方式編寫perl代碼是一個非常好的想法,因爲一旦習慣它,你將花費更少的時間來調試程序。 – MattLBeck 2012-03-11 15:12:56