2016-10-20 4 views
6

非常に基本的な質問は申し訳ありませんが、私はPerlの初心者ですから、この問題については適切な説明を見つけることができませんでした。私はいくつかの例を書いてこれを解読しようと思っていますが、実際には専門家の知識を使うことができます。use文を使ったqw(:const)の使用

私は、開発者が使用してライブラリを調達しているいくつかのコードをつもりです:私はこれがlibExampleから定数を調達意味が、本当にこれがどのように動作するかを知っていただきたいと思います理解して何から今

use libExample qw(:const) 

use libExample qw(const)

  • :の関連性を理解しようとしているが)私たちは/言及にこのライブラリを利用する他の開発者を作るためにlibExample.pm自体に書くべきことができるものがあります:私は、単純に言うことができないのはなぜ

    1. constの代わりにそのようなオプションがあります。

    ありがとう!

  • +0

    てみ

    package Foo; use Exporter; our %EXPORT_TAGS = ( working_days => [ qw(monday tuesday wednesday thursday friday) ], weekend_days => [ qw(saturday sunday) ] ); # ... 

    私たちは、1つのタグの代わりに、5関数名でそれを使用することができますこれは:http://perldoc.perl.org/Exporter.html – rubikonx9

    +0

    @ rubikonx9:それをもっと詳しく説明し、答えに入れてください。 –

    答えて

    6
    use libExample qw(:const) 
    

    $EXPORT_TAGS{const}無名配列内のすべての名前を選択し、現在のネームスペースにインポートします。

    use libExample qw(const) 
    

    のに対してconstのを選択し、現在の名前空間でそれをインポートします。

    他の変種もありますトピックの詳細についてはExporterドキュメントを経る

    [!]name   This name only 
    [!]:DEFAULT  All names in @EXPORT 
    [!]:tag   All names in $EXPORT_TAGS{tag} anonymous array 
    [!]/pattern/ All names in @EXPORT and @EXPORT_OK which match 
    

    してください。

    +0

    simbabqueは、私が誰にも読んでほしいと示唆している例を詳細に説明しましたが、これをより正確で説明したので、これを答えとして受け入れました。 –

    8

    構文use Foo qw(:const)は、ExporterのEXPORT_TAGS機能を使用しています。

    ライブラリモジュールをセットアップするときには、通常、一連の関数またはクラス変数があります。次に、デフォルトでエクスポートする内容を指定してExporterを設定します。

    または要求されたときに、エクスポートを設定します。

    OUR @EXPORT_OK = qw(frobnicate barnicate); 
    
    sub barnicate { ... } 
    

    しかし、あなたも一緒にグループのものにそれを伝えることができるので、あなたのライブラリーの利用者は、すべてのメソッドをリストする必要はありません。この例を考えてみましょう。

    私はすべての作業日数たい場合さて、私はこれを行う必要があるだろう
    package Foo; 
    use Exporter; 
    
    our @EXPORT_OK qw(monday tuesday wednesday thursday friday saturday sunday); 
    
    sub monday { ... } 
    sub tuesday { ... } 
    sub wednesday { ... } 
    sub thursday { ... } 
    sub friday { ... } 
    sub saturday { ... } 
    sub sunday { ... } 
    

    use Foo qw(monday tuesday wednesday thursday friday); 
    

    一つの長い行です。代わりに、それらをグループ化できる場合は非常に便利です。まあ、それらは可能性があります。あなたの代わりにあなたのライブラリーでこれを行う場合:これは同等であることを

    use Foo qw(:working_days); 
    

    注:

    use Foo ':working_days'; 
    
    関連する問題