問題タブ [perl-module]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
perl - Perlモジュールの内外でエラーをどのように処理する必要がありますか?
私はperltootを使ってperlでモジュールを作る方法を学び始めました:
- 可能であれば、サンプルコードを使用して、モジュール内外のエラーを脅かす方法を知りたいですか?
例えば:
また
- モジュール内でエラー、問題、引数の欠落があったものを他に呼び出す場合、エラーがあったことを示す正しい方法はどのようになっていますか?
PS:私の質問があまりにもオフではないことを願っていますそして皆さんこんにちは:)
perl - Perl アプリケーションのインストール
いくつかのサーバーに展開するための小さな perl アプリケーションを作成しました。これは、いくつかのスクリプト、いくつかのモジュール、およびいくつかのデータ ファイルで構成されています。複数のユーザーが使用します。アプリ モジュールを site_perl ディレクトリに移動するのではなく、これらすべてのファイルを 1 つのディレクトリにまとめたいと思います。
たとえば、アプリケーションが jump.pl swim.pl Common.pm と messages.txt で構成されているとします。
アプリケーション (jump.pl または swim.pl のいずれか) は、別のディレクトリから呼び出されます。アプリケーションのインストール場所が $PATH にない可能性があるため、ユーザー (または別のアプリ) がのような絶対パス名/some/path/swim.pl
または のような相対パス名でアプリケーションを呼び出す可能性があります。../path/swim.pl
アプリケーションをできるだけシンプルに再配置したいのですが、これは、アプリケーションへのパスをできるだけ少ない場所に配置することを意味します。
現時点で swim.pl と jump.pl はこのように開始します
そのため/some/path
、いくつかのスクリプトとモジュールのいくつかの場所にあります。
保管する場所の数を最小限に抑えるための可能な手段として、次のことを検討しました/some/path
- 環境変数
PERL5LIB=/some/path
を設定して行うopen my $fh, '<', "$ENV{PERL5LIB}/messages.txt"
- シバン行を
#!/usr/bin/perl -I/some/path
- に設定しますが、messages.txt を見つけるにはどうすればよいでしょうか? - for in ?
use Cwd qw(abs_path);
の使い方を見つけてみてください。basename abs_path($0)
use lib
BEGIN
設置場所の柔軟性を最大化し、すべてをまとめ、設置場所の複数のハードコーディングを最小限に抑えるための提案はありますか?
perl - Perl 変数のデフォルト値を設定するにはどうすればよいですか?
私はPerlにまったく慣れていません。外部モジュール HTTP::BrowserDetect を使用する必要がありました。いくつかのコードをテストしていて、os_string メソッドから OS の名前を取得しようとしました。そのため、単純にオブジェクトを初期化し、返された値を格納する変数を作成しました。
一部のユーザー エージェントはブラウザ ユーザー エージェントではないため、os_string から値を取得できません。エラーが発生しますUse of uninitialized value $os_name in concatenation (.) or string
メソッド os_string が undef を返すために $os_name が初期化されていない場合、どのように処理すればよいでしょうか (これは、モジュールのソース コードを読むことで起こると思います)。これらの場合、たとえば No OS など、デフォルトの文字列を指定する方法が必要だと思います。
perl - Perl の Net::SFTP->new が「ARRAY 参照ではありません」と文句を言うのはなぜですか?
Net::SFTP を使用してリモート サーバーに接続しようとしています。
私のスクリプトは次のとおりです。
しかし、これを実行すると、次のようなエラーが表示されます。
誰でもこれで私を助けることができますか?
linux - postgresがインストールされていない場合、どうすればDBD :: Pgをインストールできますか?
postgresとNagiosで実行されている別々のサーバーがあります。nagiosで「 psql_replication_check.pl」を使用して、postgresレプリケーションステータスを監視したいと思います。このチェックスクリプトでは、データベースに接続するためにDBD::Pgモジュールが必要です。pg_configファイルのパスを要求するDBD::Pgのインストール。
Nagiosマシンにpostgresをインストールする権限がありません。以前にこの問題を修正したことがある人はいますか?
両方のシステムにCentOS5.4があります。
perl - いつ「use」を使用する必要がありますか?
私が覚えている限り、モジュールを使用するときはいつでも use
、コードの先頭に行を含めます。
最近、相互に使用する 2 つの Moose オブジェクト モジュールを作成していました。この単純すぎる例を見てください。
1 つのモジュール:
別のモジュール: パッケージ M2 0.001;
そして、それらを使用する短い例:
ここで、2 つのモジュールが相互に使用されていることに注意してください。M1
のインスタンスを作成し、M2
それを使用して を生成しますがvery_cool_name
、M2
は のインスタンスをM1
属性として持ちます。
さて、日食でコメントを外すuse M2;
とM1
、狂ってしまいます。それは、この「循環利用」が生み出すループだからではないでしょうか。
私はこれにコメントしuse
、すべてが正常に動作しているように見えます (私は思う...) が、私は本当に不安になります (私はuse
そのクラスを -ing せずにオブジェクトを使用しています!それは「合法」ですか?..)。これも私を驚かせました:
本当にいつ使用する必要があります
use
か? モノを使うときは必ず使うように教わったと思います。2 つのモジュールが相互に使用する場合、何か根本的に問題がありますか (それぞれが他のモジュールのオブジェクトを使用するという意味で)。これが論理的に不可能な場合があることは知っていますが、この場合のように、理にかなっている場合もあります。 )。
perl - 「名前 ... は一度しか使用されていません: ... でタイプミスの可能性があります」を取り除く方法は?
警告が表示されます:
まあ、この特定の警告を抑制することができることはわかっていますが、それはちょっと醜いです. 私は何か間違ったことをしていますか?私は警告されることに慣れていません:)
perl - Perlで数値を英語の形式に変換するにはどうすればよいですか?
入力例222として数値を受け取るPerlスクリプトが必要であり、222として出力されるはずです。
perl - OOP Perl でサブルーチンを呼び出す
引き継いだコードを調べていると、次の行に出くわしました。
これが というパッケージから配列を返すことはわかっていますMy::Module::DB::raw_info
。
私が確信していないのは(そして私はOOPを学んでいるだけです)、何->search_like
を指すかです。
私はそれを変数またはサブルーチンとして見ませんでしたMy::Module::DB::raw_info
ヒントをいただければ幸いです。私はこのことを学び始めたばかりです。火を浴びているようなものです。(後でもっと幸せになることはわかっていますが) うん!
perl - ポータブル Perl のコンパイルと CPAN モジュールの組み込み
CPAN モジュール、具体的には YAML モジュールを含むポータブル バージョンの perl をコンパイルしようとしています。このポータブル バージョンを多数の Redhat Linux マシンのホーム ディレクトリにコピーし、$PATH に追加して、デフォルトの perl バージョンの代わりにこのバージョンを使用していくつかのテストを実行できるようにする予定です。
私は既に perl のポータブル バージョンをコンパイルして、別のマシンで動作させることができました。ただし、YAML モジュールをコンパイルしてインストールすると、ローカルでは動作しますが、他のマシンにコピーすると失敗します。
YAMLモジュールのローカルでのコンパイル手順は次のとおりです
YAML モジュールをローカルにインストールし、スクリプトで YAML モジュールを使用するとローカルでも動作します。
perl を別のマシンにコピーして YAML モジュールを使用しようとすると、これがエラーになります...
lib/site_perl/5.10.1/x86_64-linux/YAML/LibYAML.pm がローカル コピーに存在するにもかかわらず。
私がやろうとしていることは可能ですか?
もしそうなら、どこが間違っていますか?