2012-06-06 97 views

回答

2

您可以使用Tie::File

use Tie::File; 
tie @array, 'Tie::File', $filename or die $!; 
shift @array; 
untie @array; 
+0

漂亮的解決方案! – Marcus

1
`sed 1d filename.txt > newfile.txt` 

應該工作。如果你不把它重定向到一個文件,它只會讀取整個文件減去stdout的第一行。

0

發送到sed的STDOUT(其中Perl繼續捕獲到變量中)而不是filename.txt的輸出。您想使用sed-i

sed -i "1d" filename.txt 

由於沒有輸出捕捉,所以使用反引號是沒有意義的。你想要system

system('sed -i "1d" filename.txt'); 

更好:(避免啓動另一個shell)

system('sed', '-i', '1d', 'filename.txt'); 

最佳:(有沒有錯誤,你檢查)

use IPC::System::Simple qw(systemx); 
systemx('sed', '-i', '1d', 'filename.txt'); 
+0

「sed的」 啓動失敗: 「聶mo┐naodnalečŠokreťlonegopliku」 在accmaker.pl線26 在翻譯:無法打開此文件 – Luke

+1

@ user1100671,這意味着該路徑'FILENAME.TXT '不涉及現有的文件。它與你的問題無關 – ikegami

+0

加載一個模塊似乎很蹩腳,而不是核心模塊,只是爲了檢查'system'函數的返回值。 – tchrist

0

因爲你在做使用sed的,這裏的內聯是一個Perl當量..

perl -ne'$.==1?next:print' <(seq 1 10) 

凡選項的意思是,

-n    assume "while (<>) { ... }" loop around program 
-e program  one line of program (several -e's allowed, omit programfile) 

其他注意事項,

  • $.是當前行號的變量。
  • <()是在後臺生成FIFO的Bash伏都教。
相關問題