在Perl代码中处理和生成文件

时间:2014-04-16 19:57:17

标签: perl file filenames

我有perl代码(称为aggregator.pl),它从名为' testdata.csv'的文件中读取一些数据。通过命令

open (F,'testdata.csv');  
my @lines=<F>;    
close(F);

打开输出的新文件句柄

open (F1,'>>testdata_aggregates.csv');

并附加到此输出文件&#39; testdata_aggregates.csv&#39;一些计算的结果。

要启动我的perl代码,只需输入我的命令提示符:

$ perl aggregator.pl

现在,我有不同的数据文件,例如20100909.csv20100910.csv,我想更改我的perl代码,这样当我从命令提示符启动代码时,我告诉perl的名称他应该使用的输入文件(例如,&#39; 20100909.csv&#39;)并且他应该相应地命名输出文件(例如&#39; 20100909_aggregates.csv&#39;,基本上,添加_aggregates到输入文件名)。

关于如何更改我的代码的任何建议以及如何启动新代码添加他应该使用的data_input文件的名称?

2 个答案:

答案 0 :(得分:2)

只需通过@ARGV接受参数。

您的脚本应该以:

打开
use strict;
use warnings;
use autodie;

die "Usage: $0 Input_File Output_File\n" if @ARGV != 2;

my ($infile, $outfile) = @ARGV;

稍后在您的档案中

open (F, '<', $infile);

# ...

open (F1,'>>', $outfile);

答案 1 :(得分:1)

通常会重写这样一个应用程序,它从STDIN读取并简单地写入STDOUT。当在命令行上调用程序时,可以使用重定向操作符来指定文件:

$ perl aggregator.pl <testdata.csv > testdata_aggregates.csv
$ perl aggregator.pl <20100909.csv > 20100909_aggregates.csv
...

脚本内部有哪些变化?我们不会打开文件F,而是:my @lines = <>。我们不打印到F1,而是打印到STDOUT,这是隐式选择的:print F1 "foo\n"变为print "foo\n"