在终端窗口中运行脚本和定义对象值

时间:2015-05-29 15:39:34

标签: perl

当我运行Perl脚本时,我打开Mac上的终端窗口并在移动到包含perl脚本的文件夹后写入“perl test1.pl”。

通常我发现自己想要多次运行相同的Perl,通常是在同一时间运行,但只需进行很小的更改。

例如说这个perl脚本“test1.pl”看起来像这样:

$year = 2001;
<rest of code that uses $year>

我想执行“test1.pl”,其中$ year = 2001,其中$ year = 2002,等等。为此,我通常运行$ year = 2001的脚本,然后调整脚本,使$ year = 2002,保存,打开新的终端窗口,再次运行,重复。

有没有办法通过终端窗口中的指定提交perl脚本$ year的值?

我在想:“perl test1.pl,$ year = 2001”

谢谢!

2 个答案:

答案 0 :(得分:3)

执行此操作的一种方式(多种方式)是:

perl test1.pl 2002

然后将其运行为:

perldoc -v @ARGV
如果你没有在命令行中指定年份,那么

2001将是一个defualt。另见:unique_ptr<int>

答案 1 :(得分:0)

如果你想从命令行提供参数,我强烈建议使用Getopt::Long模块。您可以这样使用代码

use strict;
use warnings;
use Getopt::Long;

my $year = 2001;

GetOptions (
      'year|y=i' => \$year
);

print "$year\n";

您将以perl test1.pl -y 2002perl test1.pl -y=2002perl test1.pl --year=2002perl test1.pl --year 2002的方式调用此脚本。

$year的默认值为2001,如果脚本被称为perl test1.pl,则将打印2001。

i中的year|y=i表示perl将期望您提供整数类型,而非int类型将在此处生成错误。

评论后编辑

这两个答案都可以解决您的问题。但我更喜欢使用Getopt而不是其他方法。原因是: -

  1. 使用ARGV方法用户必须在参数位置具体。相反,在这种方法中,人们可以在任何位置放置参数。 perl a.pl -y 2 -z 3per a.pl -z 3 -y 2相同。

  2. 让用户更有信心,因为他/她知道哪个参数是出于什么目的(给定参数名称是相关的)。

  3. 如果你正在为其他人制作东西,那么这种方式有很大帮助。使用help作为参数并使用这样的参数解释它们比解释它们将此参数置于第一位置并将该参数置于第二位更好。

  4. 我认为接近你的问题的两种方式在技术上都会解决问题,但我个人更喜欢我的方法。如果你正在制作有很多选项的程序,它会更干净,也更好。