インストールされたPerlモジュールのパスを名前で取得するにはどうすればいいですか? Time::HiRes
?
SGE Grid Engineシステムの異なるノードでPerlスクリプトを実行する必要があるため、これが必要です。他のユーザー名で実行することもあります。
CPAN.pmを使用して自分でパッケージをインストールできますが、フォルダーにchmod 666がなければ、他のユーザーにインストールするのはそれほど簡単ではありません。
whichpm
、aクロスプラットフォームCLI(Linux、 OSX、Window)インストールされたPerlモジュールをモジュール(パッケージ)名で検索し、オプションで、偶発的な重複の検出を含むそれらに関する情報を報告します。
例
# 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
前提条件:Linux、[〜#〜] osx [〜#〜]、またはWindows、Perl v5.4.50以降がインストールされている。
Node.js または io.js がインストールされている場合、次のように パッケージ をインストールします。
[Sudo] npm install whichpm -g
whichpm
をダウンロードします。chmod +x whichpm
で実行可能にします。$PATH
(OSX)や/usr/local/bin
(Linux)など、/usr/bin
内のフォルダーに移動またはシンボリックリンクします。Perl -MTime::HiRes -e 'print $INC{"Time/HiRes.pm"}'
またはperldoc -l Time::HiRes
Perlに付属のcpanツールを使用して、モジュールの詳細を取得できます。
$ 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)
[email protected]
インストールしていないモジュールでも動作します:
$ 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)
[email protected]
たぶん、svnのようなXMLオプションが必要だと思います。
スクリプトで実際に使用されているモジュールを見つける必要がある場合は、PerlデバッガーM
コマンドを使用できます。
[ivan @ server〜] $ Perl -d your_script.pl ... デバッグされたプログラムは終了しました。 qを使用して終了するか、Rを使用して再起動します。 o prevent_exitを使用してプログラム終了後の停止を回避します。 hq、h Rまたはhoを使用して追加情報を取得します。 DB M 'AutoLoader.pm' => '5.60 /usr/lib/Perl5/5.8.8/AutoLoader.pm'から 'Carp.pm' => '1.04/usr/lib /からPerl5/5.8.8/Carp.pm ' ...
これは、同じ名前のモジュールが異なるフォルダーにある場合に役立ちます。
私は別のものを見つけました: http://www.perlmonks.org/?node_id=5687
#!/bin/sh
echo 'print map { sprintf( "%20s : %s\n", $_, $INC{$_} ) } sort keys %INC; print "\n'$1' version : $'$1'::VERSION\n\n"' | Perl "-M$1"
このスクリプトは、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
[〜#〜] v [〜#〜] モジュールを使用するのが好きです。
CPANからインストールするか、パッケージlibv-Perl
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
最も簡単な方法は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
内のすべてのフォルダーを検索することです。