命令行 – 为什么我的命令行参数被解释为布尔值(Perl 6)?

鉴于此计划:

#!/bin/env perl6
sub MAIN ($filename='test.fq',:$seed=floor(now) )
{
    say "Seed is $seed";
}

当我在没有任何命令行参数的情况下运行它时,它工作正常.但是,当我给它一个种子的命令行参数时,它说它的值为True:

./seed.p6 --seed 1234
Seed is True

为什么数字1234被解释为布尔值?

解决方法

Perl 6的MAIN参数处理可以很好地逐步打字.参数可以并且应该进行类型转换以减少歧义并改进验证:

#!/bin/env perl6                                                                                                                                    
sub MAIN (Str $filename='test.fq',Int :$seed=floor(now))
{
    say "Seed is $seed.";
}

在将种子类型转换为Int之后,必须为此选项指定一个数字参数,并且不再默认为布尔值:

perl6 ./seed.pl -seed 1234
Usage:
  ./seed.pl [--seed=<Int>] [<filename>] 


perl6 ./seed.pl -seed=abc
Usage:
  ./seed.pl [--seed=<Int>] [<filename>] 


perl6 ./seed.pl -seed=1234
Seed is 1234.

相关文章

1. 如何去重 #!/usr/bin/perl use strict; my %hash; while(...
最近写了一个perl脚本,实现的功能是将表格中其中两列的数据...
表的数据字典格式如下:如果手动写MySQL建表语句,确认麻烦,...
巡检类工作经常会出具日报,最近在原有日报的基础上又新增了...
在实际生产环境中,常常需要从后台日志中截取报文,报文的形...
最近写的一个perl程序,通过关键词匹配统计其出现的频率,让...