0

File::Findをこのようにrequireでロードするとき、このスクリプトを変更して警告を受け取らないようにするにはどうすればよいでしょうか?

#!/usr/bin/env perl
use warnings;
use strict;
use 5.10.1;

require File::Find;
File::Find->import('find');

find( {
    wanted     => sub {
        my $file = $File::Find::name;       
        #say $file; 
    },
    no_chdir   => 1,
},
shift );

出力:

#Name "File::Find::name" used only once: possible typo at ./perl9.pl line 11.
4

2 に答える 2

3

requireをに置き換えるだけuseです。それはそれを修正します。

一般に、これまでに使用する唯一requireの理由は、実行時に遅延モジュールのロードを実行する特定の理由がある場合です。通常、あなたはしません。

モジュールからシンボルをインポートしたくない場合はuse、次のように空のリストをに渡します。

use File::Find ();

また

use File::Find qw();

編集:モジュールの読み込みを延期する正当な理由があり、ikegamiの回避策があまりにも醜い場合は、次のように記述して、ローカルで警告を無効にすることができます

no warnings 'once';

警告を生成するステートメントの前。これにより、最も内側の囲んでいるコードブロックの残りの部分に対するその特定の警告が無効になります。どの警告メッセージがどのクラスに属しているかを確認するには、perldiagを参照してください。

于 2013-01-19T11:20:11.233 に答える
2

まず、そのようなファイルをロードしないでください。:)

その場合は、次を追加してください。

$File::Find::name if 0;

それを行うきれいな方法は、に変更$File::Find::nameすることです

do { no warnings 'once'; $File::Find::name }
于 2013-01-19T09:11:23.103 に答える