問題タブ [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 - 列ヘッダーと行ヘッダーを使用した値のマッピング
以下のデータを含むファイルがいくつかあります。
サンプル ファイル 1:
以下に示すように、列 4 の値を列 2 および 3 にマップします。
出力が必要です。
これが私がこれまでに試したことです:
私が得ている出力は以下の通りです。
perl - Perl でパッケージのバージョンを指定するにはどうすればよいですか?
5.10.0 より前のドキュメントと最近のバージョンのモジュールの間でアドバイスが矛盾していて、少し混乱しています。 Perl のベスト プラクティスでは、バージョン文字列 ('v1.0.3') が不適切であり、次のようにバージョンを指定する必要があることを明確に示しています。
しかし、バージョン モジュールは、バージョン文字列の使用に戻ったことを示しています。
後退しましたか、それともその背後に理由がありますか?
perl - サブルーチンとして呼び出すことができるのに、Perlオブジェクトがskip()メソッドを見つけられないのはなぜですか?
私はPerlモジュールに取り組んでおりskip()
、次のように書いたメソッドを呼び出すときはいつでも:
私は得る:
私がそれを次のように呼ぶとき:
Perlはそれを見つけます!
奇妙なことに、 " skip
"その他( " skipper
"、 " hello
")という名前を付けると、この構文は機能します。
おそらくskip()
「秘密の」予約済みキーワードか何かだと思いましたが、sort()
andという名前のメソッドnext()
(予約済みであることがわかっています)もあり、それらは正常に機能します。
skip
このメソッドに「 。」という名前を付けたいと思います。Perlがそれを見つけられない理由を誰かが知っていますか?
perl - Perlスクリプトで使用されているすべてのモジュールを見つけてインストールするにはどうすればよいですか?
デプロイするPerlスクリプトがいくつか与えられました。
これらのスクリプトで使用されるすべてのモジュールを見つけてインストールする最も簡単な方法は何ですか?
編集:
私が見つけることができることから、評価に条件付きインクルードまたはインクルードはありません。
perl - Perl を使用して、CSV ファイルの値を使用してグラフを作成するにはどうすればよいですか?
私はこれが初めてで、このタスクを実行する方法の手がかりが必要です。次のサンプル データを含む csv ファイルがあります。
(指定されたユーザー入力に従って) csv ファイルからデータを読み取り、XY(散布) チャートを作成するための perl スクリプトを作成したいと考えています。日付が 2009-01-01 でタイプ B のグラフを作成したいとします。ユーザーは「2009-01-01 B」のようなものを入力する必要があり、CSV ファイルの値を使用してグラフを作成する必要があります。
誰かが最初にコードを提案してもらえますか?
perl - foreach ループで配列を更新するにはどうすればよいですか?
ハッシュに対していくつかの数学的操作を行う Perl スクリプトを作成しています。このハッシュには、以下のサンプルに示す値が含まれています。以下のコードを書きました。foreach ループを使用せずに配列値に対してこのコードを個別に実行すると、出力は問題ありません。しかし、配列値に対して foreach ループを使用してこれを実行すると、A の値の合計は良好ですが、B からの出力には前の値が追加されます。
コード:
問題はこの行にあると思います。以前のすべての値を保存しているため、次の foreach ループですべての値を追加します。
したがって、ここに 2 つの問題があります。
1) foreach ループの反復ごとに配列 (@data) を更新するにはどうすればよいですか?
2) 配列 ref ($ec) に値を追加して配列に格納するにはどうすればよいですか? 次のコードを使用する場合:
出力では、@count と $total に同じ値が返されます。
提案を教えてください。
perl - これらの Perl 使用行では何が起こるでしょうか?
ここで何が起こるかわかりません:
それは匿名ハッシュだと思います。モジュールはラインからどのように使用していuse
ますか? 光を当てることができますか?
編集: PAR モジュールには興味がありません。私はそれがカーテンの後ろでどのように機能するかに興味があります. モジュールをそのように構成するにはどうすればよいですか?
perl - 失敗する可能性のあるものに「or die」を追加しないようにする Perl モジュールはありますか?
あらゆる種類の外部コマンドと、失敗する可能性のあるさまざまなファイルシステム コマンドを実行するコードを書いています。
or die
失敗する可能性のあるものに追加する手間を省けるモジュールはありますか?
次の代わりに何かでラップできるようにしたいと思います。
私は得る:
mkdir
失敗した場合は で失敗したことがわかり、失敗したmkdir
場合system
は で失敗したことがわかりますsystem
。
perl - Perl コンストラクターは undef または「無効な」オブジェクトを返す必要がありますか?
質問:
コンストラクターでのエラー処理の"ベスト プラクティス" と見なされるものとその理由は何ですか?
「ベスト プラクティス」は、Schwartz からの引用、または CPAN モジュールの 50% がそれを使用しているなどです。しかし、一般的なベストプラクティスが実際には最善のアプローチではない理由を説明しているとしても、誰からの十分に合理的な意見があればうれしいです.
このトピックに関する私自身の見解 (何年にもわたる Perl でのソフトウェア開発から得た情報) では、perl モジュールでのエラー処理に対する 3 つの主なアプローチを見てきました (私の意見では、最良のものから最悪のものへとリストされています)。
オブジェクトを構築し、無効なフラグを設定します (通常は "
is_valid
" メソッド)。多くの場合、クラスのエラー処理を介してエラー メッセージを設定します。長所:
$obj->errors()
他のメソッド呼び出しの後と同じように、不正なコンストラクターの後に型呼び出しを使用できるため、標準の (他のメソッド呼び出しと比較して) エラー処理が可能になります。追加情報を渡すことができます (例: >1 エラー、警告など...)
軽量の「やり直し」/「修正」機能を可能にします。つまり、構築されたオブジェクトが非常に重く、多くの複雑な属性があり、100% 常に問題なく、有効でない唯一の理由が誰かが入力したためである場合日付が正しくない場合は
$obj->setDate()
、コンストラクター全体を再度実行するオーバーヘッドの代わりに、単純に " " を実行できます。このパターンは必ずしも必要ではありませんが、適切な設計では非常に役立ちます。
短所:私が知っているものはありません。
" " を返し
undef
ます。短所: 最初のソリューションの長所 (グローバル変数以外のオブジェクトごとのエラー メッセージと、重いオブジェクトに対する軽量の "fixme" 機能) のいずれも実現できません。
コンストラクター内で死ぬ。いくつかの非常に狭いエッジケースを除いて、個人的には、この質問の余白にリストするには理由が多すぎるため、これはひどい選択だと考えています。
更新:明確にするために、まったく失敗しない非常に単純なコンストラクターと、すべてのエラーチェックが発生する重いイニシャライザーメソッドを持つという(それ以外の場合は非常に価値があり、優れた設計の)ソリューションは、どちらかの単なるサブセットであると考えていますこの質問では、ケース #1 (イニシャライザがエラー フラグを設定する場合) またはケース #3 (イニシャライザが停止する場合) を使用します。明らかに、そのようなデザインを選択すると、オプション 2 は自動的に拒否されます。
perl - 新しい Perl をインストールせずに、最新の Perl にある CPAN モジュールをインストールまたはアップグレードするにはどうすればよいですか?
Perl モジュール (この場合はFindBin ) をインストールしたいのですが、 Perl 5.10.1 ディストリビューションに含まれているため、cpan
Perl 5.10 をインストールしたいと思っています。経由でモジュールだけをインストールする方法はありますcpan
か?
私が見ることができる唯一のオプションは、 source から直接インストールすることですMakefile.PL
。これは、個別のパッケージ ( .pm
.
これは 1 つのファイルしかない小さなモジュールなので、この場合は実行可能ですが、もっと大きなパッケージをインストールしたい場合はどうすればよいでしょうか?
編集:これは元の質問とは多少異なりますが、モジュールが Perl ディストリビューションにパッケージ化されているという一般的な問題について語っています:「スタンドアロン」の FindBin (バージョン 1.49 ) に構文エラーがあることがわかったので、バージョン 1.50を取得しましたPerl 5.10.1 ディストリビューション... しかし、このモジュールは現在 Perl 5.10 の一部として CPAN にリストされているため、このデルタで何が変更/修正されたかを説明する CHANGES ファイルを見つけることができません。この情報を引き出すために開発者リポジトリにアクセスする必要があるのは合理的ですか?)
EDIT 2.さて、これはより良い例です。Perl 5.8.8 では、バージョン 1.04 の Carp を使用しています。しかし、Perl 5.10.1 はバージョン 1.11 に同梱されているようです。Perl 5.10.1 をすべてドラッグすることなく、CPAN に Carp の最新バージョンをインストールしてもらう方法はありますか? perl 5.10.1 のインストールを除いて、CPAN の Carp モジュールへのリンクさえ見つかりません。