1

Perlでは、0または1のいずれかを含む.confファイルを読み取る必要があります。値が1の場合、ifステートメントにあるものをすべて実行する必要があります。これが私が今持っているものです:

open(CONF, "/var/web/onhit.conf");
if(<CONF>) {
   print "Hello World!";
}
close(CONF);

.confファイルに0が含まれている場合でも、ifステートメントの内容は常に評価されます。このコードはファイルを正しく読み取ることができるため、ファイルの読み取りが正しいことはわかっています。

open(CONF, "/var/web/onhit.conf");
print <CONF>;
close(CONF);

ファイルに1が含まれている場合は、1が出力され、その逆も同様です。誰かが私の最初のスニペットの何が問題なのか知っていますか?申し訳ありませんが、私はPerlのn00bです。:-)

4

3 に答える 3

6

編集:どうやら、あなたはあなたの投稿の真理値を反転させていました、そしてあなたはif()ステートメントが常に実行されたと言うつもりでした。意味あり。何が起こるかというと、数字や。ではなく、文字列またはを<CONF>読み取ります。末尾の改行はfalseとして評価されないようにするため、それを行う必要があります(または、他の投稿で説明されているように、関数を使用します)。どちらの方法でも機能するはずです。"1\n""0\n"10"0"chomp()int()

(残念ながら、 ed文字列は返されchomp()ませchomp()が、削除された文字数のカウントが返されるため、単に言ってそれで済ますことはできませんif(chomp(my $tmp = <CONF>))。)

とにかく、これは私がしたことです:

open(CONF, "/var/web/onhit.conf");
chomp(my $tmp = <CONF>);
if($tmp) {
  print "Hello, world!\n";
}
close CONF;

いくつかの推奨事項:

  • の3つの引数形式を使用するopen()か、少なくとも"<"ファイル名の前に指定することを検討してください。
  • $conf古い、より不器用なファイルハンドル形式()を使用するのではなく、変数を使用してファイルハンドル()を保持することを検討してくださいCONF

これは私が書いたであろうコードです:

open my $conf, "<", "/var/web/onhit.conf";
chomp(my $tmp = <$conf>);
if($tmp) {
  print "Hello, world!\n";
}
close $conf;
于 2009-05-27T21:48:00.567 に答える
1

int関数を使用して文字列を整数に変換するだけです。

open(CONF, "/var/web/onhit.conf");
if(int(<CONF>)) {
    print "Hello World!";
}
close(CONF);
于 2009-05-27T21:49:38.723 に答える
1

または、比較の改行に含めることもできます。

if (<CONF> =~ /^1$/) {
}
于 2009-05-28T02:34:39.710 に答える