0

固定数のパラメーターと2つのオプションのパラメーターを指定するサブルーチン内の文字列を解析しています。注意:使用するパラメータ文字列も指定します。

このパラメータ文字列の形式は次のとおりです。

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

したがって、間違いなく6つのパラメーターと、最大8つの2つのオプションのパラメーターがあります。

上限は、パラメーターの最大数に設定する必要がありますか、それとも最大数より1つ多い、つまり8または9に設定する必要がありますか?

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つ以上の引数が指定されている場合、異なる結果が生成されます。

>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 に答える