perl use POSIX qw(strftime); という書き方について?
HIDEO
HIDEO
ATOMRSS
  • コード求むID: 337
  • 登録日時:  2008/10/19 23:57
  • 最終更新日時: 2008/10/22 01:56
  • アクセス数: 446
  • タグ:  perl module
  • codeなにがしブックマークに追加する 0 users
  • このページを del.icio.us に追加
  • このページをはてなブックマークに追加

こんばんは、

perl の 
POSIX モジュールを使用する場合に
use POSIX qw(strftime);
と書きますが

Netモジュールの場合は、
use Net::Ping ;
のように ::
を使用します。

qw( ) と ::  では
違いがあるのでしょうか?

コメント

両者は全然違う構文要素です。
::はパッケージ名の区切り文字、qwはリストを生成する演算子です。

Net::Pingは「そういう名前のモジュール」であって、ただそれを読み込んでいるだけです。
ややこしいのですが、パッケージ内の関数などもPackageName::func_nameという修飾名になっていて、文脈によって区別されます。

qw(foo bar baz)は('foo', 'bar', 'baz')と同じ意味で、use文はリストを渡されると、モジュールを読み込んだ後にモジュール内のimportという名前の関数にこのリストを引数として渡す約束になっています。
import関数はどんな処理をしてもいいのですが、大抵のモジュールでは、モジュールを読み込んだ(use文を書いた)パッケージに関数をエクスポートするという処理を行います。
つまりuse POSIX qw(strftime)はPOSIXモジュールを読み込み、strftime関数を現在のパッケージにインポートする(名前を修飾せずに使えるようにする)という意味です。

useについての詳細な説明は、コマンドラインでperldoc -f useとタイプすると表示されます(英語ですが)。

GJ

  • ゲスト
  • 2:ゲスト (BLUEPIXY)
  • 2008/10/20 00:54

:: は、モジュールの階層を表すために使います。
qw で指定されたモノは、EXPORT_OK なシンボル(つまりデフォルトでは、ロードされないが使ってもいいよというもの)を明示的にインポートして使えるようにします。
http://www.geocities.jp/KY_webid/perl5/037.html
を読んでみて下さい。

GJ

  • HIDEO
  • 3:HIDEO
  • 2008/10/22 01:56

こんばんは、

回答いただき
ありがとうございました。

  • GoodJob
  • 0

前へ 1 次へ

コメントする

[block]から[/block]までの範囲はブロック表示されます。
部分的に目立たせたい時や、引用などにお使いください。

[code]から[/code]までの範囲は等幅表示されます。
ソースコードや設定ファイルの記述などにお使いください。

ゲスト投稿者:ゲスト:

関連ソースコード・ノウハウを登録

PDFLib | A library for processing PDF on the fly プレゼン公開・共有サイト handsOut.jp オープンタイプ株式会社 チーム・マイナス6% - みんなで止めよう温暖化

ブックマークコメント