[解決済み] Use of uninitialized value in string ne "というエラーはどこから発生するのでしょうか?
2022-02-26 15:13:01
質問
の初期化されていない値はどこにあるのでしょうか? 以下のコード ?
#!/usr/bin/perl
use warnings;
my @sites = (undef, "a", "b");
my $sitecount = 1;
my $url;
while (($url = $sites[$sitecount]) ne undef) {
$sitecount++;
}
出力します。
Use of uninitialized value in string ne at t.pl line 6.
Use of uninitialized value in string ne at t.pl line 6.
Use of uninitialized value in string ne at t.pl line 6.
Use of uninitialized value in string ne at t.pl line 6.
解決方法は?
を使用することはできません。
undef
を文字列比較で使用すると、警告が表示されます。
if ("a" ne undef) { ... }
を実行すると警告が発生します。変数が定義されているかどうかをテストしたい場合は、使用してください。
if (defined $var) { ... }
元の質問についてのコメント。
配列に対して反復処理を行うのは奇妙な方法ですね。もっと普通のやり方は、次のようになります。
foreach my $url (@sites) { ... }
を削除し
$sitecount
を完全に上書きしないようにしましょう。
$url
をループ本体で使用します。また
undef
の値を配列で指定します。もし、その
undef
を何らかの理由(あるいは未定義の値がそこに挿入されることを想定)で行うことができます。
foreach my $url (@sites) {
next unless defined $url;
...
}
もし、ループの構成で未定義のテストをしたいのであれば、以下のものが必要です。
while (defined $sites[$sitecount]) {
my $url = $sites[$sitecount];
...
$sitecount++;
}
を使えば警告を避けることができますが、自動生成に注意する必要があります。
undef
が他のライブ値の間に混在しています。
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン