タグ付けされた質問 「perl」

Perlは手続き型の高水準の汎用動的プログラミング言語であり、正規表現と文字列解析機能のネイティブサポートで知られています。Perlに関する一般的な質問には、このタグを使用してください。新しい(ただし関連する)言語Raku(以前の "Perl 6")に関連するものについては、rakuタグを使用してください。他の言語でのPerlスタイルの正規表現の場合は、regexタグを使用します。PCREライブラリに基づいている場合は、pcreタグを使用します。

6
PerlとPHPの違い[終了]
現在のところ、この質問はQ&A形式には適していません。私たちは回答が事実、参考文献、または専門知識によってサポートされることを期待しますが、この質問はおそらく議論、議論、投票、または拡張された議論を誘います。この質問を改善でき、再開できると思われる場合は、ヘルプセンターにアクセスしてください。 7年前休業。 私はPerl 5を学ぶつもりで、今までPHPしか使っていなかったので、言語の違いについて少し知りたいと思いました。 PHPが「Perlハック」のセットとして始まったとき、PHPは明らかにいくつかのPerl機能のクローンを作成しました。 構文の主な違いは何ですか?Perlでは、何かを表現するためのオプションや方法が増えるのは本当ですか? Perlが動的Webサイトで使用されなくなったのはなぜですか?PHPの人気が高まった理由は何ですか?
101 php  perl 

8
Perl CGIスクリプトをトラブルシューティングするにはどうすればよいですか?
動作していないPerlスクリプトがあり、問題の絞り込みを開始する方法がわかりません。私に何ができる? 注:Stackoverflowに非常に長い回答を追加したいので、質問を追加します。私は他の回答で外部にリンクし続けており、ここにいるに値します。追加するものがあれば、私の答えを編集するのをためらわないでください。
100 perl  cgi 

7
MacRoman、CP1252、Latin1、UTF-8、ASCII間のエンコーディングを確実に推測する方法
職場では、エンコーディング関連の接続、災害、または大災害がなければ、1週間も経たないようです。この問題は通常、エンコーディングを指定せずに「テキスト」ファイルを確実に処理できると考えるプログラマーから生じます。しかし、それはできません。 したがって、今後、ファイルの末尾が*.txtまたはで終わる名前をファイルに付けることを禁止することが決定されました*.text。その考えは、これらの拡張機能により、カジュアルなプログラマーをエンコードに関する鈍い自己満足に導き、これが不適切な処理につながるということです。少なくともあなたが知っているので、それは全く拡張を持たない方がほぼ良いでしょうあなたは、あなたが持っているかわからないということ。 しかし、私たちはそれほど遠くに行くことを望んでいません。代わりに、エンコーディングで終わるファイル名を使用することが期待されます。たとえばテキストファイルの場合、これらは次のようREADME.asciiになります。README.latin1、README.utf8など、 特定の拡張子が必要なファイルの場合、PerlやPythonなど、ファイル自体の内部でエンコーディングを指定できる場合は、それを行う必要があります。そのような機能がファイルの内部に存在しないJavaソースのようなファイルの場合、次のように、エンコーディングを拡張の前に置きます。SomeClass-utf8.java。 出力の場合、UTF-8は 強く推奨されます。 しかし、入力のために、コードベースの何千ものファイルをどのように処理するかを理解する必要があります。 *.txt。すべての名前を変更して、新しい標準に合わせたいと思います。しかし、それらすべてを目にすることはできません。したがって、実際に機能するライブラリまたはプログラムが必要です。 これらは、ASCII、ISO-8859-1、UTF-8、Microsoft CP1252、またはApple MacRomanでさまざまです。何かがASCIIであるかどうかを判断できることはわかっていますが、何かがおそらくUTF-8であるかどうかを知ることには大きな変化がありますが、8ビットのエンコーディングに困惑しています。ほとんどのデスクトップがMacであるUnix混合環境(Solaris、Linux、Darwin)で実行しているため、迷惑なMacRomanファイルがかなりあります。そして、これらは特に問題です。 しばらくの間、私はプログラムでどれを決定する方法を探していました ASCII ISO-8859-1 CP1252 マクロマン UTF-8 ファイルがあり、3つの異なる8ビットエンコーディングを確実に区別できるプログラムまたはライブラリが見つかりません。おそらく、1,000以上のMacRomanファイルだけが存在するため、私たちが使用する文字セット検出器は、それらを探知できなければなりません。私が見たものは何もトリックを管理できません。ICU文字セット検出器ライブラリに大きな期待がありましたに MacRomanを処理できません。また、PerlとPythonの両方で同じ種類のことを行うためのモジュールも調べましたが、何度も繰り返しますが、MacRomanの検出はサポートされていません。 したがって、私が探しているのは、ファイルが5つのエンコーディングのどれにあるか、できればそれより多いかを確実に判断する既存のライブラリまたはプログラムです。特に、私が引用した3つの3ビットエンコーディング、特にMacRomanを区別する必要があります。ファイルは99%以上の英語のテキストです。他の言語にはいくつかありますが、多くはありません。 ライブラリコードの場合、言語設定は、Perl、C、Java、またはPythonの順で、それが単なるプログラムである場合、完全なソースで提供され、Unixで実行され、完全に邪魔にならない限り、その言語がどの言語であるかは特に問題になりません。 他の誰かがランダムにエンコードされた膨大な数のレガシーテキストファイルのこの問題を抱えていましたか?もしそうなら、それをどのように解決しようとしましたか、そしてどれほど成功しましたか?これは私の質問の最も重要な側面ですが、プログラマーにファイルの実際のエンコーディングを使用してファイルに名前を付ける(または名前を変更する)ように勧めることで、将来の問題を回避するのに役立つかどうかにも興味があります。制度的にこれを施行しようとした人はいますか?その場合、それは成功したかどうか、そしてなぜですか? そして、はい、問題の性質上、明確な答えを保証できない理由を完全に理解しています。これは特に、続行するのに十分なデータがない小さなファイルの場合に当てはまります。幸い、私たちのファイルはめったに小さくありません。ランダムREADMEファイルを除いて、ほとんどのファイルは50kから250kのサイズ範囲にあり、多くはより大きなサイズです。サイズが数Kを超えるものはすべて、英語であることが保証されています。 問題ドメインは生物医学のテキストマイニングであるため、PubMedCentralのすべてのオープンアクセスリポジトリのように、大規模で非常に大規模なコーパスを扱う場合があります。かなり巨大なファイルは5.7ギガバイトのBioThesaurus 6.0です。このファイルはほとんどすべてUTF-8であるため、特に煩わしいものです。しかし、一部の麻痺した頭蓋骨は、8ビットエンコーディングであるMicrosoft CP1252のいくつかの行に行き詰まりました。あなたがそれをトリップするまでにはかなり時間がかかります。:(

11
WindowsではどのバージョンのPerlを使用すればよいですか?[閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 6年前休業。 この質問を改善する win32.perl.orgウェブサイトは、MS WindowsのためのいくつかのPerlディストリビューションへの参照を提供します。 長い間、ActiveStateの ActivePerlを使用してきました が、最近はStrawberry Perlに切り替えました 。 IMHO Active PerlがいちごPerlよりも優れている唯一の利点は、Perl Tkが付属しているという事実です。つまり、グラフィカルデバッガーであるDevel :: ptkdbを簡単にインストール できます。それ以外に、Strawberry Perlにはすべての利点があると思います。

11
grep-Pは機能しなくなりました。検索を書き直すにはどうすればよいですか?
新しいバージョンのOSXはサポートさgrep -Pれなくなったようです。そのため、一部のスクリプトが機能しなくなりました。 var1=`grep -o -P '(?<=<st:italic>).*(?=</italic>)' file.txt` grepを変数にキャプチャする必要があり、ゼロ幅アサーションを使用する必要があります。 \K var2=`grep -P -o '(property:)\K.*\d+(?=end)' file.txt` 任意の代替案をいただければ幸いです。
98 macos  perl  shell 



8
Perlのprintはデフォルトでどのように改行を追加できますか?
Perlでは、私のprintステートメントのほとんどが次の形式をとります print "hello." . "\n"; すべての厄介な "\ n"を横に置いておくのを避ける良い方法はありますか? 私はmyprint自動的に\ nを追加するような新しい関数を作成できることを知っていますが、既存のをオーバーライドできればよいでしょうprint。
95 perl  printing  newline 

6
Perlで文字列が空かどうかを確認する適切な方法は何ですか?
私はこのコードを使用して、文字列が空かどうかを確認しています: if ($str == "") { // ... } また、等しくない演算子と同じ... if ($str != "") { // ... } これは機能するようです(私は思う)が、それが正しい方法であるかどうか、または予期しない欠点があるかどうかはわかりません。何かが正しくないのです。

6
Perl配列を反復処理する最良の方法
Perl配列を反復処理するための(速度とメモリ使用量の観点から)最良の実装はどれですか?もっと良い方法はありますか?(@Array保持する必要はありません)。 実装1 foreach (@Array) { SubRoutine($_); } 実装2 while($Element=shift(@Array)) { SubRoutine($Element); } 実装3 while(scalar(@Array) !=0) { $Element=shift(@Array); SubRoutine($Element); } 実装4 for my $i (0 .. $#Array) { SubRoutine($Array[$i]); } 実装5 map { SubRoutine($_) } @Array ;
93 arrays  perl  iteration 

7
Rubyのbundler / Perlのカートンに相当するPythonは何ですか?
virtualenvとpipについて知っています。ただし、これらはbundler / cartonとは少し異なります。 例えば: pipはシバンまたはスクリプトをアクティブにするための絶対パスを書き込みます pipにはexecサブコマンドがありません(bundle exec bar) virtualenvはPythonインタープリターをローカルディレクトリにコピーします すべてのPython開発者がvirtualenv / pipを使用していますか?Python用の他のパッケージ管理ツールはありますか?
93 python  ruby  perl  virtualenv  pip 

12
UNIXで任意のスクリプトをデーモン化するにはどうすればよいですか?
私は、任意に、汎用スクリプトやコマンドを有効にすることができますdaemonizerたいデーモンを。 対処したい2つの一般的なケースがあります。 永久に実行する必要があるスクリプトがあります。停止した場合(または再起動時)、再起動します。同時に2つのコピーが実行されないようにしてください(コピーが既に実行されているかどうかを検出し、その場合は起動しないでください)。 単純なスクリプトまたはコマンドラインコマンドがあり、それを永久に繰り返し実行し続けたいと思っています(実行と実行の間に少し間を置いて)。この場合も、スクリプトの2つのコピーが同時に実行されないようにしてください。 もちろん、ケース2のスクリプトの周りに「while(true)」ループを記述して、ケース1のソリューションを適用するのは簡単ですが、より一般的なソリューションは、ケース1のスクリプトに適用されるため、ケース2を直接解決するだけです。ウェル(スクリプトがスクリプトが本当にあれば、これまで当然のことながら(死ぬために意図されていない場合、あなただけの短い、あるいはまったく一時停止をすることができず、一時停止が実際に問題ではない、その後死ぬことはありません))。 ソリューションには、たとえば、既存のスクリプトにファイルロックコードやPID記録を追加する必要がないことに注意してください。 より具体的には、次のように実行できるプログラム「デーモン化」が欲しい % daemonize myscript arg1 arg2 または、例えば、 % daemonize 'echo `date` >> /tmp/times.txt' これにより、times.txtに追加される日付のリストが増え続けます。(daemonizeの引数が上記のケース1のように永久に実行されるスクリプトである場合、daemonizeは引き続き正しく機能し、必要に応じて再起動します。)次に、上記のようなコマンドを.loginに追加できます。および/またはそれを1時間ごとまたは1分ごとにcronする(私がそれが予期せず死ぬことについてどれほど心配していたかによる)。 注意:デーモン化スクリプトは、デーモン化しているコマンド文字列を覚えておく必要があります。これにより、同じコマンド文字列が再度デーモン化されても、2番目のコピーは起動されません。 また、このソリューションはOS XとLinuxの両方で理想的に機能するはずですが、どちらか一方のソリューションは歓迎されます。 編集:で呼び出す必要がある場合は問題ありませんsudo daemonize myscript myargs。 (私がこれをすべて間違っていると思っている場合、または迅速で汚い部分的な解決策がある場合は、それも聞きたいです。) PS:それは便利だ場合は、ここにあるのpythonに似た質問特定。 そして、同様の質問に対するこの回答には、任意のスクリプトを素早く汚い悪魔化するための有用なイディオムがあるようです。


3
Perlで「my」キーワードをどのように使用すればよいですか?
オンラインのPerlスクリプトの例では、変数名の前に「my」キーワードが表示され続けますが、それが何を意味するのかわかりません。マニュアルページや他のサイトをオンラインで読んでみましたが、使用方法の見方とマニュアルの違いを考えると、それが何であるかを理解するのに苦労しています。 たとえば、この投稿では配列の長さを取得するために使用されています: Perlで配列のサイズを見つける しかし、マニュアルは言う: リストされた変数は、囲んでいるブロック、ファイル、またはevalに対してローカル(字句的に)であると宣言します。複数の値がリストされている場合は、リストを括弧で囲む必要があります。 それは何をし、どのように使用されますか?

8
grep、regex、またはperlを使用してパターンに従って文字列を抽出する方法
次のようなファイルがあります。 <table name="content_analyzer" primary-key="id"> <type="global" /> </table> <table name="content_analyzer2" primary-key="id"> <type="global" /> </table> <table name="content_analyzer_items" primary-key="id"> <type="global" /> </table> 私は続く引用符で何かを抽出する必要がありname=、すなわち、content_analyzer、content_analyzer2とcontent_analyzer_items。 私はこれをLinuxボックスで行っているので、sed、perl、grep、またはbashを使用したソリューションで問題ありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.