我在一个子例程中解析一个字符串,它指定了固定数量的参数和两个可选参数。注意我还指定了正在使用的参数字符串。
此参数字符串的格式为:
local_fs_name rem_fs_name timeout diff_limit hi hihi (rem_hi) (rem_hihi)
所以绝对有六个参数和两个可选参数,最多八个。
上限应该设置为参数的最大数量还是比最大值多一个,即八个或九个?
我能想到的限制返回字段数量的唯一原因split
是出于效率目的(并且您的子例程必须被调用很多,并且参数比这重要的要多得多),或者如果您真的想保留最后一个字段中的分隔符。
您不应该使用split
来验证参数的数量。将它们全部提取到一个数组中,然后验证数组的内容。像这样的东西:
my $params = 'local_fs_name rem_fs_name timeout diff_limit hi hihi rem_hi rem_hihi';
my @params = split ' ', $params;
if (@params < 6 or @params > 8) {
die "Usage: mysub local_fs_name rem_fs_name timeout diff_limit hi hihi [rem_hi [rem_hihi]]\n";
}
这不是一个风格(最佳实践)问题。
split ' ', $_
和
split ' ', $_, 6
当提供 7+ args 时会产生不同的结果。
>perl -E"say +( split ' ', 'a b c d e f g' )[5]"
f
>perl -E"say +( split ' ', 'a b c d e f g', 6 )[5]"
f g
我最好的猜测是不想限制。
然后是您是否要保留尾随字段的问题。
>perl -E"@a=split(' ', 'a b c d e ' ); say 0+@a;"
5
>perl -E"@a=split(' ', 'a b c d e ', -1); say 0+@a;"
6
我最好的猜测是尾随空格并不重要。