6

私は Perl を学びuse、モジュールについて何かを理解しようとしています。

(仮定use strict; use warnings;)

use File::Find;モジュールのすべてのサブルーチンをロードすることを理解しています。

use File::Find qw(find);モジュールのサブルーチンのみをロードすることを理解してfindいます (ただし、他のサブルーチンは 経由で使用できますFile::Find::finddepth)。

それで、何をしFile::Find ();ますか?具体的には、なぜ空の括弧なのですか?

4

2 に答える 2

11

tl;dr : デフォルトの代わりに何もエクスポートしないように指示されています。

長いバージョン:

File::Find には がour @EXPORT = qw(find finddepth);あるため、これらのサブはデフォルトでエクスポートされます。モジュールを使用しただけで、それをエラーと呼ぼうとするとfind、正しい引数を渡さなかったfindのにfind 存在するためです。

quentin@workstation:~ # perl
use File::Find;
find();

no &wanted subroutine given at /Users/david/perl5/perlbrew/perls/perl-5.16.1/lib/5.16.1/File/Find.pm line 1064.

ステートメントでリストを渡すuseと、デフォルトが上書きされ、要求したサブルーチンのみがエクスポートされます。空のリストは、何もエクスポートされfindず、存在しないためエラーになることを意味します。そのような:

quentin@workstation:~ # perl
use File::Find ();
find();

Undefined subroutine &main::find called at - line 2.
于 2012-11-15T15:32:52.340 に答える
1

では、File :: Find();は何をするのでしょうか。行う?具体的には、なぜ空の親ですか?

つまり、このモジュールを-ingし、関数をインポートするために呼び出す必要があります(例のように)。したがって、空の角かっこは、何もインポートしたくないことを意味し、デフォルトのシンボルをインポートすることを暗黙的に禁止します。File::Find::importfindfinddepth

于 2012-11-15T15:36:35.570 に答える