Perl コードをときどき書く Linux システム管理者 (または) perl プログラム言語を学びたい開発者の場合、これらの 20 の基本的な perl プログラミングのヒント この記事で説明されているトリックを使用すると、すぐに始めることができます。
1.インストールされているすべての Perl モジュールを Unix コマンド ラインから一覧表示
以下に示すように、インストールされているすべての perl モジュールのリストを取得します。
$ perl -MFile::Find=find -MFile::Spec::Functions -Tlw -e 'find { wanted => sub { print canonpath $_ if /\.pm\z/ }, no_chdir => 1 }, @INC' /usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi/HTML/Filter.pm /usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi/HTML/LinkExtor.pm /usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi/HTML/PullParser.pm /usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi/HTML/Parser.pm /usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi/HTML/TokeParser.pm .....
上記の例では、
- ファイル::検索 および File::Spec::Functions module は、インストールされているすべてのモジュールを一覧表示するために使用されます。
- -M オプション モジュールをロードします。 use module を実行します スクリプトを実行する前に
- -T オプション 汚染チェックを有効にします。これは perl にユーザーからのデータを追跡し、安全でないことを避けるように指示します。ここでは、このオプションを使用して、 から現在のディレクトリ名を取得することを回避しています。 @INC 変数と、ディレクトリから利用可能な .pm ファイルを再帰的に一覧表示します。
- -l オプション 出力での自動改行処理を有効にします。 print ステートメントでは、各行の終わりに改行区切り (\n) が追加されます。
- -w オプション 警告メッセージを出力します。
- -e オプション 次の文字列が perl スクリプト (つまり、一連のコマンド) として解釈されることを示します。
2.インストールされているすべての Perl モジュールを perl スクリプトから一覧表示します (ExtUtils::Installed パッケージを使用)
次の perl コード スニペットを使用して、インストールされている perl モジュールのリストを取得します。
my $Inst = ExtUtils::Installed->new(); my @Modules = $Inst->modules(); print "Current List of Installed PERL Modules:\n\n"; foreach my $mod(@Modules){ print "$mod\n"; }
注意 :モジュール ExtUtils::Installed は、perl プログラムにプリインストールされていません。したがって、cpan からインストールする必要があります。
3. Perldoc コマンドを使用して Perl モジュールを一覧表示する
perldoc perlmodlib perl プログラムにプリインストールされているすべてのモジュールを一覧表示します。
$ perldoc perlmodlib Attribute::Handlers Simpler definition of attribute handlers AutoLoader Load subroutines only on demand .........
注: 「perldoc perllocal」コマンドを使用して、インストールされている追加の perl モジュールを識別することもできます。
$ perldoc perllocal
perldoc perllocal コマンドは、システムにインストールされているすべてのオプション モジュールを次の情報とともに一覧表示します:
- 設置日
- perl モジュールがインストールされているディレクトリの場所
- Perl モジュールのバージョン番号
- など
4. Unix コマンド ラインから Perl ドキュメントを表示
以下に示すように、perldoc または man コマンドを使用して、特定の perl モジュールに関するヘルプを取得できます。
$ perldoc Regexp::Common (or) $ man Regexp::Common
perl ドキュメントが十分でない場合は、perldoc オプション -m を使用して、指定された perl モジュールのソース コードとフォーマットされていないポッド ドキュメントの両方を表示します。
$ perldoc -m Regexp::Common
特定の perl 関数に関するドキュメントを表示するには、以下に示すようにオプション -f を使用します。
$ perldoc -f splice
5.オンラインの Perl ドキュメントを表示 (またはオフラインで使用するためにダウンロード)
多くの優れた perl チュートリアル Perl プログラミング ドキュメントでオンラインで入手できます。
この Web サイトから、オフラインで表示するために HTML または PDF バージョンの perl ドキュメントをダウンロードすることもできます。
- 完全版 (HTML および PDF ファイルを含む) – perldoc.tar.gz
- Lite バージョン (HTML ファイルのみを含む) – perldoc-html.tar.gz
6. Podbrowser を使用して Perl ドキュメントを読む
ポッドブラウザをダウンロードします。インストールされている perl モジュール、関数、および perl ドキュメントをポッドブラウザーから視覚的に参照できます。ウェブサイトから:
PodBrowser is a documentation browser for Perl. You can view, search and print documentation for Perl's builtin functions, its "perldoc" pages, pragmatic modules and the default and user-installed modules.
注: 前に説明したように、Vim エディターを Perl-IDE として使用することもできます。
7. CPAN モジュール構成を手動で変更
Linux コマンド ラインから perl モジュールをインストールするには、CPAN を使用します。 perl モジュールのインストール方法については、手動と CPAN コマンドの両方で説明しました。
Perl モジュール CPAN ( perl -MCPAN ) を初めて使用すると、いくつかのオプションを構成するスクリプトが実行されます。たとえば、tar、gzip、および unzip ファイルの場所、ビルド ディレクトリのキャッシュ サイズ、ソース ファイルの場所などを構成します。
CPAN モジュール構成ファイルを手動で再構成するには、次のファイルのいずれかを編集できます。
- ~/.cpan/CPAN/MyConfig.pm – ユーザー固有の Perl CPAN 構成ファイル
- /etc/perl/CPAN/Config.pm – システム全体の Perl CPAN 構成ファイルは、perl モジュール ディレクトリ ツリーのどこかに保存されます。
$ vim ~/.cpan/CPAN/MyConfig.pm (and / or) $ vim /etc/perl/CPAN/Config.pm
8. CPAN モジュール構成をインタラクティブに変更
以下に示すように cpan シェルを起動し、o conf init を実行します。 、「手動構成の準備ができていますか」と尋ねられます。続行するには、オプション (はい/いいえ) を指定します。これにより、すべての構成パラメーターとその値が一覧表示されます。
$ perl -MCPAN -e shell cpan> o conf init cpan> o conf
9. Perl モジュールがインストールされているかどうかを確認する
perl モジュール (Regexp::Common など) がインストールされているかどうかを知りたい場合は、次のコマンドを実行します。 「1」の場合 出力として、指定された perl モジュールがインストールされます。そうでない場合は、以下に示すようなエラー メッセージが表示されます。
$ perl -MRegexp::Common -le 'print 1' Can't locate Regexp/Common.pm in @INC (@INC contains: /etc/perl /usr/local/lib/perl/5.8.8 /usr/local/share/perl/5.8.8 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.8 /usr/share/perl/5.8 /usr/local/lib/site_perl .).
注: perldoc または man コマンドを使用して、perl モジュールがインストールされているかどうかを確認することもできます。 perl モジュールがインストールされている場合、モジュールのマニュアル ページが正常に開きます。そうでない場合は、「このモジュールのマニュアル/ドキュメントが見つかりません」と表示されます
$ perldoc Regexp::Common $ man Regexp::Common
10. Perl モジュールが配置されているディレクトリを一覧表示する
perl 配列 @INC 「do EXPR」、「require」、または「use」構造がライブラリファイルを探す場所のリストが含まれています。次のワンライナーは、@INC perl 配列の内容を示しています:
$ perl -e 'foreach $folder (@INC) { print "$folder\n";}'
11.インストールされている Perl モジュールのバージョンを確認する
モジュールのバージョン番号を確認するには、次のコマンドを使用します。
#-- check the version number of CGI module $ perl -MCGI -e 'print "$CGI::VERSION \n"' #-- check the version number of Regexp::Common module $ perl -MRegexp::Common -e 'print "$Regexp::Common::VERSION \n"'
注: また、Perl ベスト プラクティス ブックに関するレビューもお読みください。
12.使用する Perl モジュールの最小バージョンを指定してください
プログラムで特定のバージョンの perl モジュールを使用したい場合があります。そのモジュールの以前のバージョンを使用しないようにするには、以下に示すように、use ‘module’ ステートメントに必要な最小バージョン番号を追加してください。
#-- Use version 5.8 of later of module LWP use LWP 5.8
注: インストールされているモジュールのバージョンが use コマンドで指定したバージョンよりも低い場合、perl プログラムは適切なエラー メッセージで終了します。
13. Web アプリケーションの開発に役立つ Perl モジュール
Web アプリケーションを開発している場合は、次の perl モジュールの使用を検討してください。
- CGI – Web ページを作成するための汎用モジュール
- テンプレート – 動的 Web コンテンツを生成するためのテンプレート ツールキット
- LWP – LWP は Web コンテンツの取得に使用されます
- WWW::機械化 – これを使用して、ウェブサイトとのやり取りを自動化します
14. Perl スクリプトが実行されているオペレーティング システムを特定する
基になるオペレーティング システムの名前は、変数 $^O に格納されます。以下は一般的な $^O 値の一部です
- Linux – Linux
- MSWin32 – Windows
- aix – AIX
- solaris – Solaris
注: $^O に格納される値には、オペレーティング システムの名前のみが含まれ、リリース番号は含まれません。リリース番号を確認するには、POSIX パッケージの POSIX::uname() の使用を検討してください。
15. Perl スクリプト内で定数値を定義する
定数値を定義する最善の方法は、Perl を使用することです 読み取り専用 または 定数
use Readonly; Readonly my $PI => 3.1415926535; (or) use Constant PI => 3.1415926535;
次の点に注意してください:
- Readonly モジュールを使用すると、読み取り専用のスカラー、ハッシュ、および配列を定義できます。
- Readonly 変数を変更しようとすると、プログラムが停止します。
16. Perl スクリプトを実行している OS ユーザーや OS グループを特定する
次の定義済み変数を使用して、現在のプロセスのユーザーとグループの情報を取得します:
- $< – 実ユーザー ID (uid);独自の価値
- $> – 有効なユーザー ID (euid);独自の価値
- $( – 実際のグループ ID (gid);グループのリスト (スペース区切り)
- $) – 実効グループ ID (egid);グループのリスト (スペース区切り)
次の点に注意してください:
- この情報は Unix システムにのみ適用されます
- これらの変数が保持する値は整数です。
- ユーザー名とグループ名を取得するには、「(getpwuid($<))[0]」(ユーザー情報用) と「getgrgid($()」(グループ用) を使用します。
17.外部コマンドの実行
以下で説明するように、Perl から外部コマンドを実行するには多くの方法があります。
- システム() – コマンドを実行したいが、その出力をキャプチャしたくない
- 重役 – 呼び出し元の perl スクリプトに戻りたくない場合
- バックティック – コマンドの出力をキャプチャしたい
- 開く – コマンドを (入力または出力として) perl スクリプトにパイプしたい
18. B::Deparse を使用してプレーンで乱雑な Perl スクリプトを解析する
難読化された、または単に乱雑で読みにくい Perl コードのチャンクがありますか? B::Deparse モジュールが役立つ場合があります。与えられたプログラムをコンパイルしてから逆コンパイルし、展開して適切にフォーマットします。 perl プログラムに書かれたコメント行を削除します。
コマンド ラインで実行するには、「perl -MO=Deparse prog.pl」と入力します。以下はその使用例です。
最初に入力プログラムを作成します:
$ cat scary.pl for(74,117,115,116){$::a.=chr};(($_.='qwertyui')&& (tr/yuiqwert/her anot/))for($::b);for($::c){$_.=$^X; /(p.{2}l)/;$_=$1}$::b=~/(..)$/;print("$::a$::b $::c hack$1.");
Perl スクリプト Scary.pl を Deparse モジュールに渡します
$ perl -MO=Deparse scary.pl foreach $_ (74, 117, 115, 116) { $a .= chr $_; } ; $_ .= 'qwertyui' and tr/eiqrtuwy/nr oteah/ foreach ($b); foreach $_ ($c) { $_ .= $^X; /(p.{2}l)/; $_ = $1; } $b =~ /(..)$/; print "$a$b $c hack$1."; scary.pl syntax OK
19.インストールされている DBI ドライバーの一覧表示
DBI は、Perl の標準データベース インターフェイス モジュールです。次の Perl プログラムは、インストールされているすべての DBI ドライバーのリストを出力します。
use strict; use warnings; use DBI; print map "$_\n",DBI->available_drivers;
上記のプログラムの出力例:
DBM ExampleP File Proxy Sponge mysql
必要なドライバーがインストールされていない場合は、CPAN を使用して適切な DBD (データベース ドライバー) モジュールを見つけてください。
20.正規表現特殊変数
perl で最も便利な機能または最も強力な文字列操作機能の 1 つは、正規表現です。
この中心にあるのは、他の多くの UNIX ユーティリティで共有されている正規表現です。
Perl には、m// または s/// 正規表現が一致するたびに埋められる特殊変数のホストがあります。
- $1、$2、$3 などは後方参照を保持します。
- $+ は最後の (最大番号の) 後方参照を保持します。
- $&(ドル アンパサンド) は、正規表現の一致全体を保持します。
- $' (ドルの後にアポストロフィまたは一重引用符が続く) は、正規表現一致の後 (右側) の文字列の一部を保持します。
- $` (ドルのバッククォート) は、正規表現一致の前 (左側) の文字列の部分を保持します。
Perl がすべて遅くなるため、パフォーマンスが重要な場合、これらの変数を perl スクリプトで使用することはお勧めしません。 正規表現は、perl スクリプト全体で一致します。
これらの変数はすべて読み取り専用で、次の正規表現一致が試行されるまで保持されます。
例
$string = "This is the geek stuff article for perl learner"; $string =~ /the (g.*) stuff(.*) /; print "Matched String=>$&\nBefore Match=>$`\nAfter Match=>$'\nLast Paren=>$+\nFirst Paren=>$1\n";
上記の例の出力:
Matched String=>the geek stuff article for perl Before Match=>This is After Match=>learner Last Paren=> article for perl First Paren=>geek