57

インストールされたPerlモジュールのパスを名前で取得するにはどうすればよいTime::HiResですか?

SGE Grid Engineシステムのさまざまなノードでperlスクリプトを実行する必要があるという理由だけで、これが必要です。場合によっては、他のユーザー名として実行することもあります。

CPAN.pmを使用して自分用のパッケージをインストールできますが、フォルダーにchmod666がないと他のユーザー用にインストールするのは簡単ではありません。

4

10 に答える 10

93

perl -MTime::HiRes -e 'print $INC{"Time/HiRes.pm"}'またperldoc -l Time::HiRes

于 2009-10-13T02:41:36.170 に答える
30

主に私perldocは場所を取得するために使用します:

$ perldoc -l Module

cpanPerlに付属のツールを使用してモジュールの詳細を取得することもできます。

$ cpan -D Time::HiRes
Time::HiRes
-------------------------------------------------------------------------
    High resolution time, sleep, and alarm
    J/JH/JHI/Time-HiRes-1.9719.tar.gz
    /usr/local/perls/perl-5.10.0/lib/5.10.0/darwin-2level/Time/HiRes.pm
    Installed: 1.9711
    CPAN:      1.9719  Not up to date
    Andrew Main (Zefram) (ZEFRAM)
    zefram@fysh.org

インストールしていないモジュールでも機能します。

$ cpan -D Win32::Process
Win32::Process
-------------------------------------------------------------------------
    Interface to Win32 Process functions
    J/JD/JDB/Win32-Process-0.14.tar.gz
    Installed: 
    CPAN:      0.14  Not up to date
    Jan Dubois (JDB)
    jand@activestate.com

多分私はsvnのようなXMLオプションが必要だと思います。

于 2009-10-13T07:05:59.287 に答える
21

注:このソリューションでは、ダウンロードする必要のある(自己作成の)ユーティリティの使用を提案しています。それは私が役立つと信じている機能を提供しますが、サードパーティのソリューションを最初にインストールすることはすべての人にとって選択肢ではありません


インストールされたPerlモジュールをモジュール(パッケージ)名で検索し、オプションで偶発的な重複の検出など、それらに関する情報を報告whichpmするクロスプラットフォームCLI(Linux、macOS、Window)を作成しました。

# Locate the Data::Dumper module.
$ whichpm Data::Dumper
/usr/lib/perl/5.18/Data/Dumper.pm

# Locate the Data::Dumper module, and also print
# version information and core-module status.
$ whichpm -v Data::Dumper
Data::Dumper    2.145   core>=5.005 /usr/lib/perl/5.18/Data/Dumper.pm

# Locate the Data::Dumper module and open it in your system's default text
# editor.
$ whichpm -e Data::Dumper

# Look for accidental duplicates of the Foo::Bar module.
# Normally, only 1 path should be returned.
$ whichpm -a Foo::Bar
/usr/lib/perl/5.18/Foo/Bar.pm
./Foo/Bar.pm

# Print the paths of all installed modules.
$ whichpm -a

インストール

前提条件:Perl v5.4.50以降がインストールされているLinuxmacOS、またはWindows 。

npmレジストリからのインストール

Node.jsまたはio.jsをインストールした状態で、次のようにパッケージをインストールます

[sudo] npm install whichpm -g

手動インストール(macOSおよびLinux)

  • CLIをとしてダウンロードしますwhichpm
  • で実行可能にしchmod +x whichpmます。
  • 移動するか、 (OSX)や(Linux)$PATHなどのフォルダにシンボリックリンクします。/usr/local/bin/usr/bin
于 2015-09-01T22:51:07.450 に答える
9

スクリプトで実際に使用されているモジュールを見つける必要がある場合は、perlデバッガMコマンドを使用できます。

[ivan @ server〜] $ perl -d your_script.pl
..。

デバッグされたプログラムが終了しました。qを使用して終了するか、Rを使用して再起動します。
  プログラム終了後の停止を回避するには、oinhibito_exitを使用します。
  hq、h R、またはhoを使用して、追加情報を取得します。

DB M
'AutoLoader.pm' => '5.60 from /usr/lib/perl5/5.8.8/AutoLoader.pm'
'Carp.pm' => '1.04 from /usr/lib/perl5/5.8.8/Carp.pm'
..。

これは、同じ名前のモジュールが異なるフォルダーにある場合に役立ちます。

于 2009-10-13T16:30:28.970 に答える
4

私はちょうど別のものを見つけます:http: //www.perlmonks.org/?node_id = 568730

#!/bin/sh

echo 'print map { sprintf( "%20s : %s\n", $_, $INC{$_} ) } sort keys %INC; print "\n'$1' version : $'$1'::VERSION\n\n"' | perl "-M$1" 

スクリプトを実行すると、%INCのすべてが出力されます。perl -MSTH::STH

例えば:

$ whichpm CGI       
              CGI.pm : /System/Library/Perl/5.8.6/CGI.pm
         CGI/Util.pm : /System/Library/Perl/5.8.6/CGI/Util.pm
             Carp.pm : /System/Library/Perl/5.8.6/Carp.pm
         Exporter.pm : /System/Library/Perl/5.8.6/Exporter.pm
         constant.pm : /System/Library/Perl/5.8.6/constant.pm
         overload.pm : /System/Library/Perl/5.8.6/overload.pm
           strict.pm : /System/Library/Perl/5.8.6/strict.pm
             vars.pm : /System/Library/Perl/5.8.6/vars.pm
         warnings.pm : /System/Library/Perl/5.8.6/warnings.pm warnings/register.pm : /System/Library/Perl/5.8.6/warnings/register.pm

CGI version : 3.05
于 2009-10-13T02:55:49.027 に答える
3

Vモジュールを使うのが好きです。

libv-perlCPANからインストールするか、DebianまたはUbuntuにパッケージをインストールするだけです。

次に、次のように使用します。

$ perl -MV=DBI
DBI
    /Users/michiel/.plenv/versions/5.24.0/lib/perl5/site_perl/5.24.0/darwin-2level/DBI.pm: 1.636

その他の出力例:

$ perl -MV=Time::HiRes
Time::HiRes
    /usr/lib/perl/5.18/Time/HiRes.pm: 1.9725
于 2016-10-06T14:15:00.887 に答える
1

最も簡単な方法はperldoc -l Time::HiResです。


何らかの理由でそれが利用できない場合は、次の実用的な解決策があります。

ステップ1:スクリプトでモジュールをインスタンス化します...

#! /usr/bin/perl -w
use Time::HiRes();
new Time::HiRes();

ステップ2:Perlグラフィカルデバッガーでスクリプトを実行します...

export PERL5LIB=$PERL5LIB:~/perl ## tell perl where to look for "Devel"/"ptkdb.pm"
perl -d:ptkdb (yourscript.pl)

ステップ3:電話Step inに。new

モジュールのフルパス名は、デバッガウィンドウのタイトルバーに表示されます。


便利な別のアプローチは、内のすべてのフォルダを検索することです$PERL5LIB

于 2015-11-17T02:01:37.660 に答える
0

追加のソフトウェアをインストールせずにこれを実行できるようにする@Ivanの答えを拡張するために、以下はPerlのデバッガーを使用して特定のモジュールを検索します。

perl -de 'use <Module Name>;'

例えば:

perl -de 'use DBD::Oracle;'

出力:

Loading DB routines from perl5db.pl version 1.37
Editor support available.

Enter h or 'h h' for help, or 'man perldebug' for more help.

DBD::Oracle::CODE(0x27f81d8)(/usr/local/lib64/perl5/DBD/Oracle.pm:113):
113:            $ENV{PERL_BADFREE} = 0;
  DB<1> q
于 2020-04-06T15:05:28.813 に答える
0

OSXでは、次のものを使用できます。

perl -e'print join( "\ n"、@ INC)'

結果はあなたのlibの場所になるはずです。

次に、このコードをPerlコードに追加します。

use lib '/your/folder/location/to/lib';
于 2020-10-04T16:29:57.087 に答える
0

Perldoc-lは私のために働きます

perldoc -l "File::Find"
/opt/perl_32/lib/5.8.8/File/Find.pm
于 2021-10-11T07:41:40.613 に答える