2012-07-25 51 views
2

我是超新的Perl,但我只是試圖打開一個文件,並從它讀取一些線。從文件中讀取第3行至第5行,如何將這些行號變爲變量?

到目前爲止的代碼看起來是這樣的:

open FILE, "file.txt" or die "can not open file"; 
while (<FILE>) { 
    print if ($.== 3..5) 
} 

但我需要能夠改變得到什麼線。所以那些3和5的數字需要變量。

也可以有人幫助我更好地理解此代碼?我在想什麼$。是正確的,我將如何將它放入一個數組或其他東西來替代打印命令,以進一步處理這些行?

謝謝!

回答

3

請注意語法。通過perl -MO=Deparse,-p運行你的例子表明,Perl的解釋爲

(open(FILE, 'file.txt') or die('can not open file')); 
while (defined(($_ = <FILE>))) { 
((($. == 3) .. 5) and print($_)); 

只是靠運氣,範圍運算符做你希望它是什麼做的,因爲..使用$.(輸入行號),在默認情況下。

要使用變量而不是常量,只需使用

print if $. == $x .. $. == $y; 
+0

有趣的是,現在它每次只打印一行文件。由$ start變量和$ end確定似乎並不重要。我正在使用草莓Perl。編輯:等待這是爲其他人回答。那是你嗎?我不知道,但答案已經消失。 – user1463899 2012-07-25 13:57:01

+0

其他回覆中存在錯誤,因此作者將其刪除。 – choroba 2012-07-25 13:59:26

+0

啊,好吧,我明白了。但是,這完全謝謝你! – user1463899 2012-07-25 14:02:56

0
$ perl -E'say for "aa".."ah"' | perl -ne'print if 3..5' 

使用$.是不必要的,當你根據documentation使用常量,但是當你使用的變量,你AVE明確提到它:

perl -E'say for "aa".."ah"' | perl -ne'BEGIN{($f,$t) = [email protected],0,2;}print if ($.==$f)..($.==$t)' 3 5 
相關問題