Perl split功能限制parm的最佳实践值

时间:2013-01-09 12:41:06

标签: perl split limit

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

此参数字符串的格式为:

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

所以肯定有六个参数,带有两个可选参数,最多八个。

上限应设置为最大参数数量还是一个多于最大数量,即8或9?

2 个答案:

答案 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

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