0

我在一个子例程中解析一个字符串,它指定了固定数量的参数和两个可选参数。注意我还指定了正在使用的参数字符串。

此参数字符串的格式为:

local_fs_name rem_fs_name timeout diff_limit hi hihi (rem_hi) (rem_hihi)

所以绝对有六个参数和两个可选参数,最多八个。

上限应该设置为参数的最大数量还是比最大值多一个,即八个或九个?

4

2 回答 2

3

我能想到的限制返回字段数量的唯一原因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";
}
于 2013-01-09T12:51:16.607 回答
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

我最好的猜测是尾随空格并不重要。

于 2013-01-09T17:48:15.693 回答