我正在子程序中解析一个字符串,该子程序指定了固定数量的参数和两个可选参数。注:我还指定了正在使用的参数字符串。
此参数字符串的格式为:
local_fs_name rem_fs_name timeout diff_limit hi hihi (rem_hi) (rem_hihi)
所以肯定有六个参数,带有两个可选参数,最多八个。
上限应设置为最大参数数量还是一个多于最大数量,即8或9?
答案 0 :(得分:3)
限制字段数量split
的唯一理由是我能想到的是为了提高效率(并且你的子程序必须用称为 lot 非常多多于此要求的参数)或者确实希望将分隔符保留在最终字段中。
您不应该使用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";
}
答案 1 :(得分:1)
这不是一种风格(最佳实践)问题。
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
我最好的猜测是尾随空格并不重要。