0

スクリプトを見ましたが(以下を参照)、「-n」に関する詳細情報を見つけることができませんでした。

my $numeric =0;
my $input = shift;
if ($input eq "-n") {
    $numeric =1;
    $input = shift;
}
my $output = shift;
open INPUT, $input or die $!;
open OUTPUT, ">$output" or die $!;
my @file = <INPUT>;
if ($numeric) {
    @file = sort { $a <=> $b } @file;
} else {
   @file = sort @file;
}
print OUTPUT @file;

スクリプトを説明するテキストには、次のように書かれて-nいます。Google 検索では、ほとんどの「英数字以外」の記号は認識されないようです。そのため、"-n"検索しても何も得られません。私が見た他の唯一の場所"-n"は、perl の学習で、次のように「変換されsedたスクリプトはオプションの有無にかかわらず動作できます」と書かれてい-nます。"-n"これがスクリプトと同じかどうかさえわかりません。に関する詳細情報を見つけることができるアイデアはありますか-n(ただし、単に数値文字列を意味する場合があります ?? それ以上のものはありません)

4

2 に答える 2

5

このスクリプトで使用される は、 で使用されるフラグ-nとはまったく関係ありません。言い換えれば、これは:-nperl

perl -n script.pl

これとは完全に異なります:

perl script.pl -n

あなたが持っているのは2番目のケースです。のドキュメントをご覧くださいshift

配列の最初の値をシフトして返し、配列を 1 短くしてすべてを下に移動します。配列に要素がない場合は、未定義の値を返します。ARRAY が省略された場合、サブルーチンとフォーマットのレキシカル スコープ内で @_ 配列をシフトし、サブルーチン外の @ARGV 配列と eval STRING 、 BEGIN {} 、 INIT {} 、 CHECK {} によって確立されたレキシカル スコープ内でもシフトします。 、 UNITCHECK {} 、および END {} コンストラクト。

それは口いっぱいですが、それが言っていることは、サブルーチン内になく、shift単独で表示される場合、 の最初の要素を取得するということです@ARGV。なに@ARGVperlvarを見てみましょう。これらの奇妙な変数はすべて文書化されています:

配列 @ARGV には、スクリプト用のコマンドライン引数が含まれています。

これらはスクリプトの引数であり、 perlの引数ではないことに注意してください。したがって、誰かがあなたのスクリプトを で実行すると、 string になるperl script.pl -nことが期待できます。$ARGV[0]-n

今あなたのコードを見ると、何が起こっているかは明らかです:

my $input = shift;
if ($input eq "-n") {
    $numeric =1;
    $input = shift;
}

shiftの最初の要素を取得するために、引数なしでサブルーチンの外で使用し@ARGVます。それが の場合-n、変数$numericは 1 に設定されます。その変数は、スクリプトの動作を制御します。(スクリプトは、入力ファイルと出力ファイルの名前も取得します@ARGV。)

于 2013-04-08T05:56:35.447 に答える
1

このスクリプト自体のコマンド ライン引数です。ユーザーがスクリプトの名前の後に「-n」を付けてそれを呼び出すと、スクリプトに動作方法が伝えられます。

于 2013-04-08T04:18:59.573 に答える