2012-06-06 115 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伏都教。
相关问题