3

これは、perl の初心者向けベスト プラクティスの質問です。私はこの言語が初めてです。質問は:

プログラムからの出力行を処理したい場合、どうすれば THE FIRST LINE を特別な方法でフォーマットできますか?

私は2つの可能性を考えています:

1) ループが最初に実行されると、フラグ変数が設定されます。ただし、サイクルごとに評価されます。悪い解決策

2) インデックスベースのループ (「for」など)。次に、i=1 でループを開始します。このソリューションははるかに優れています。問題は、どうすればそれを行うことができますか?

while ( <> ) コンストラクトでループするコードを見つけました。

ここでは、よりよく見ることができます:

$command_string = "par-format 70j p0 s0 < " . $ARGV[0] . "|\n";                                                                                

open DATA, $command_string  or die "Couldn't execute program: $!";

print "\t    <div>&‎nbsp;&‎nbsp;&‎nbsp;&‎nbsp;&‎nbsp;&‎nbsp;&‎nbsp;&‎nbsp;&‎nbsp;&‎nbsp;|-- <strong>Description</strong></div>\n";
while ( defined( my $line = <DATA> )  ) {
   chomp($line);
   # print "$line\n";
   print "\t    <div>&‎nbsp;&‎nbsp;&‎nbsp;&‎nbsp;&‎nbsp;&‎nbsp;&‎nbsp;&‎nbsp;&‎nbsp;&‎nbsp;|&‎nbsp;&‎nbsp;&‎nbsp;-- " . $line  . "</div>\n";
}

close DATA;

また、ここのコードを修正することを躊躇しないでください。これは私の最初の perl 詩です。

ありがとう!

4

3 に答える 3

8

$.または英語名をいつでも使用$INPUT_LINE_NUMBERして、ループ内のロジックを制御できます。

while (my $line = <>) {
    if ($. == 1) {
        # do cool stuff here
    }
    # do normal stuff here
}
于 2009-05-21T14:39:00.350 に答える
5

最初の行を別の方法で処理するには、次のようにします。

$line = <DATA>;

あなたのループの上。

読み取りの問題 (空のファイルなど) を適切にチェックすると、これは次のようになります。

if ($line = <DATA>) {
    ...do special things...
}

while (my $line = <DATA>) {
    ...do regular things...
}

defined()通話についてはわかりません。空の文字列には偽の真理値があるため、必要ないかもしれません。

于 2009-05-21T14:30:56.310 に答える
4

「ベスト プラクティス」の観点からすると、そのコード サンプルには多くの問題があります。

open DATA, $command_string  or die "Couldn't execute program: $!";
  • セキュリティ ホール、悪用してください。
  • __DATA__DATA は、現在のファイルの最後のセクションを指す魔法の値です。
  • 使用する必要があります

    open my $fh 
    

    グローバルの代わりにファイルハンドルにレキシカル変数を使用します。

  • 3 つの arg open を使用する必要があります。つまり、次のようになります。

    open my $fh, '<'  , $filename
    open my $fh, '-|' , $command
    open my $fh, '-|' , $command, @args 
    

    残念ながら、3 引数がデュアル パイプでどのように機能するかはまだわかっていません。この IPC::Open2 がありますが、それを効果的に使用する方法をまだ考えていません。提案を歓迎します。

于 2009-05-21T19:49:44.327 に答える