タグ

perlに関するpero_0104のブックマーク (195)

  • [Perl]小話:多くの人に誤解されている chomp 君の地位を向上させてみる - Perl

    よく Perl のコマンド紹介などで改行コードを削除する便利なコマンドとして紹介されるのが「chomp」というコマンドです。多くは、 「文字列の行末に改行がある場合はそれを削除し無い場合は何もしません」 という紹介がなされます。こういう紹介をうけると、 「おぉ! こいつは便利だ改行コードを自動で削除してくれるんだ、きゃっほーっ!」 ということになります。ところが試してみると 異なるOS間でやり取りしているデータに対して処理するとうまく動きません。なぜなら改行コードと呼ばれる文字には三種類のコードが存在し、chomp君が取ってくれるのは現在Perlが実行されている環境における改行コードだからです。その為ネット上では Perl 初学者の 「なんかchompがうまく動かないんですけど」 という質問があり、回答として、 「改行コードはさっさと正規表現でとっちゃおうよ」 という至極真っ当な意見ととも

  • ハッシュを結合する - シリコンの谷のゾンビ

    単語頻度を扱うと,ハッシュを結合したくなる.いちいち自己流ロジックを書いていたけれど,何か良い方法はないものか.図書館から借りてきたPerlクックブックを開いてみた. my %new_hash = (%hash1, %hash2); # これは,以下のようなハッシュの初期化ができることから納得できる # my %hash = (hoge => 1, bar => 2, piyo =>3); # my %hash = (hoge, 1, bar, 2, piyo, 3); あれ,もしかして? my %hash = ('hoge', 1, 'bar', 2, 'piyo', 3); foreach my $keyorvalue (%hash){ print $keyorvalue . "\n" } 出力結果: bar 3 foo 2 hoge 1 そういうことか!ハッシュはつまり,key, v

    ハッシュを結合する - シリコンの谷のゾンビ
    pero_0104
    pero_0104 2017/06/22
    “foreach my $key (keys %hash2){”
  • 生年月日から年齢を計算する簡単な計算式 - mtsuyuguの日記

    「生年月日から年齢を計算する簡単な計算式」という記事。感心しました。なるほどね。 PHPPerlJava と 3 つの言語で紹介しておきながら書かれているのは標準出力と型キャストだけというのが、なんともさみしいので、きちんと「計算」部分を書いてみた。 ということで、まずは perl: #!/usr/bin/perl use strict; my $byear = 1977; my $bmon = 11; my $bday = 3; my ($year,$mon, $day) = (localtime(time))[5,4,3]; my $now = sprintf( "%04d%02d%02d", $year+1900, $mon+1, $day ); my $birth = sprintf( "%04d%02d%02d", $byear, $bmon, $bday ); print

    生年月日から年齢を計算する簡単な計算式 - mtsuyuguの日記
  • 2017年 Perl5 との戦いに生き残るための最高の開発環境を手に入れる - リモートデバッグ 編 - Qiita

    はじめに 前回 の記事の続きとなります。前回構築した開発環境を元にして、今度はリモートデバッグができる環境をつくります。 この記事を読むとできるようになること この記事を最後まで読むと、こんな事ができるようになります。 つまり、リモートサーバ上で実行されている Perl5 スクリプトが実行された際に、IDE 上でデバッガを利用して変数の状態を可視化しながらデバッグが行えるようになります。 Perl5 で書かれた CGI のデバッグというと print デバッグ頼みになりがちかと思いますが、この記事で解説する環境構築を行うことで一気に Perl5 でもモダンな開発ができるようになります。 準備 前回 の記事で、IntelliJ IDEA Community Edition を用いた Perl5 (以下、Perl) の開発環境の構築について説明しました。まだ IntelliJ IDEA Com

    2017年 Perl5 との戦いに生き残るための最高の開発環境を手に入れる - リモートデバッグ 編 - Qiita
    pero_0104
    pero_0104 2017/06/19
    途中から入れるやり方おしえてほしい
  • 2017年 Perl5 との戦いに生き残るための最高の開発環境を手に入れる - Qiita

    はじめに:これは誰のための記事か? Perl で書かれた比較的大きなスクリプトやプロジェクトを保守する必要のある人. Perl 5 との戦い Perl5 (以下 Perl) といえば一時期 CGI を作るための標準的な技術として Web の開発で利用されたり、テキスト処理用の言語として昔から広く使用されている言語です。 かつてはサーバー上で CGI を動作させるために Perl でなければならない というような状態がありましたが、近年では Ruby on RailsPHP 製のフレームワークなどがサーバー上で普通に利用できるようになっており、かつてのような Perl が必要とされる ようなシチュエーションは減ってきているかと思います。 また、オブジェクト指向プログラミングや関数型プログラミングをサポートする新しい言語が普及してきている現在では、新規の開発に Perl を採用するメリッ

    2017年 Perl5 との戦いに生き残るための最高の開発環境を手に入れる - Qiita
    pero_0104
    pero_0104 2017/06/12
    IntelliJ入れてgit cloneしてきたperlファイル開いたらポップアップ出てきてOKしたらよしなに設定してもらえたのでめっちゃ楽だった
  • cgi界にはびこる民間療法 Premature end of script headers - それはそれ、これはこれ

    cgi界」という言葉があるかどうかは知らないが、「Premature end of script headers」というエラーに対して、都市伝説というか民間療法というか、そういうのがあるようだ。例えば、 #! /usr/bin/perl 。。。。でこのエラーとなるときに、 #! /usr/bin/perl -- 。。。。とすれば「なぜかわからないが直る」(笑)と書いてある。 そもそも、このメッセージは、「cgiプログラムがContent-Type ヘッダを出力する前に終了した」ということを示すだけであって、ほとんどの場合、その前に当のエラーメッセージが出ているはずだ。例えば、 (2)No such file or directory: exec of '/var/www/html/test.cgi' failed Premature end of script headers: tes

    cgi界にはびこる民間療法 Premature end of script headers - それはそれ、これはこれ
    pero_0104
    pero_0104 2017/05/29
    “#! /usr/bin/perl --”
  • perl - Time::Piece で日付を計算 - うまいぼうぶろぐ

    perldoc Time::Piece http://d.hatena.ne.jp/hirose31/20100916/1284628891 http://d.hatena.ne.jp/perlcodesample/20091105/1246274997 perl 5.8には時刻を扱う標準モジュールがなくて、たいていCPANのDateTimeを使ってたんですが、DateTimeは巨大?で依存モジュールも多いので、ちょっとした日付計算には大げさだなーと思っていました。 すると Time::Piece という軽量なモジュールがあることを知りました。5.10 では標準モジュールに加わったということもあるので、普段はこれを使えばいいかな。 Time::Piece use すると標準のlocaltime を上書きする。詳細な使い方は↑のurlとperldocで。 use Time::Piece; m

    perl - Time::Piece で日付を計算 - うまいぼうぶろぐ
  • Perlで配列の重複要素の取出しと削除 - テクデップ(Techdep)

    Perlにおける配列値の重複や削除といった操作をするにはgrep関数を利用すれば良いけれども、書いては忘れ調べ直しを繰り返している。いい加減覚えるために、メモ書きとして以下に残す。 ある配列の重複する要素を排除するには以下の様に書く。 my %tmp; my @uniq = grep { $tmp{$_}++ < 1; } (@array); 逆に配列の重複した要素だけを取り出すには、grep関数を二回通す。 my (%tmp, %tmp2); my @not_uniq = grep { $tmp2{$_}++ < 1; } (grep { $tmp{$_}++ >= 1; } (@array)); foreachを利用しても上記処理が実現できるけれども、grepを使ったほうが簡潔に記述できる。 参考リンク Perlの組み込み関数 grep の翻訳 - perldoc.jp

    Perlで配列の重複要素の取出しと削除 - テクデップ(Techdep)
  • 第7章 正規表現

    正規表現とは、ある特定の文字列ではなく、文字列の一部をパターン化して表現する手法をいいます。 複数行ある文章の中から文字列を検索する時に、検索したい文字列すべてを指定するのではなく、文字列の任意の一部を置き換え可能な状態にして検索をする場合に正規表現を用います。 たとえば、UNIXやWindowsでは、文字列を検索するときに使用される正規表現として、「*」を任意の文字列(空き文字も含む)に、「?」を任意の1文字として使用することができます。パターンを、app* と表現すると、 apple application appeal などの文字列がマッチすることになります。 この正規表現の方法は、当然ながらプログラム言語ごとに異なりますが、Perlの場合は他の言語に比べて非常に強力な正規表現によるパターンマッチ機能を備えており、より詳細にかつ容易にパターンマッチを行うことができるとされています。

    pero_0104
    pero_0104 2017/02/20
    g の大事さよ・・・
  • chomp関数 - 改行を削除する - Perl入門ゼミ

    Perl › 関数 › here chomp関数を使用すると、改行を削除することができます。 # 末尾の改行を削除 chomp $line; OSに依存しないで改行を削除する chompに関して一つ注意点があります。chompは環境に依存するということです。たとえばWindowsで実行した場合は末尾の「\x0D\x0A」あるいは「\x0A」を取り除きますが、Unix系OSで実行した場合は「\x0A」を取り除きます。\x0Dはキャリッジリターンを、\x0Aはラインフィードを表す特殊文字です。Windowsでは改行文字は「\x0D\x0A」で表されれ、Unixでは「\x0A」で表されます。 このような理由でWindows上で保存したスクリプトと読み込んだテキストファイルを、そのままUnix上に移動させた場合に、正しく改行が取り除かれないということが発生します。環境に依存しないで改行を取り除きた

    chomp関数 - 改行を削除する - Perl入門ゼミ
    pero_0104
    pero_0104 2017/02/20
    な、なんだってー!
  • Perl のグローバル変数やレキシカル変数について - Qiita

    Perl にはいくつかの変数宣言があります。 my our local state my による変数宣言は多くの書籍で解説されていておなじみのものですが、それ以外の変数宣言の意味がイマイチわからないという声も聞きます。というわけで、ざっとまとめてみました。 use strict が無かった時代 モダンな Perl では、use strict を書いた上で、使用する変数は my を使って宣言をするということが常識となりました。 とはいえ太古の昔は use strict もなく、変数も宣言することなく使用していました。いわゆるグローバル変数だけの世界です。 まさに原始的なシェルスクリプトの世界に近いですが、今では好ましい書き方とはされません。スコープを狭めたり、初出の変数であることを明示したりといったことを my で行うことが好ましいとされています。Perl も例に漏れず、プログラミング言語で

    Perl のグローバル変数やレキシカル変数について - Qiita
    pero_0104
    pero_0104 2017/01/30
    リファレンスにした配列が破壊されてゆくぅ~
  • aabbdd

    農学生命情報科学特論 I @東京大学アグリバイオインフォマティクス教育研究ユニット (2022-06) プログラミング言語未経験者を対象とした Python 入門講義。農学や分子生物学などの分野で利用される Python の最新事例を紹介しながら、Python の基礎文法の講義を行う。 AI in Japan (Artificial Intelligence Develop for Thai Industry Camp) @ Mahidol University (2022-04) Introduction to AI in Japanese agriculture. Most slides were deleted due to copyright.

  • perlの正規表現で全角文字にマッチさせるには? - (゚∀゚)o彡 sasata299's blog

    2008年07月14日23:37 Perl perlの正規表現で全角文字にマッチさせるには? 今日はperlで正規表現の話です。まずは実際のコードを見てください。 #!/usr/bin/perl use strict; use warnings; use utf8; my $data = 'あ 1245 aa気'; if ($data =~ /^(\w)(\s)(\d{4})(\s)(\w{3})$/) { print "match\n"; } このif条件ってマッチすると思いますか??実はマッチするんです!!�堯�゚Д゚) これがマッチするのは use utf8; しているためです。use utf8; すると内部的にはutf8フラグが立てられ、スクリプトがUTF-8で記述されていることを宣言します。その結果、日語のような多バイト文字であっても半角文字であっても、1文字は1文字としてカウ

    perlの正規表現で全角文字にマッチさせるには? - (゚∀゚)o彡 sasata299's blog
  • perl で時刻計算 - Time::Piece編 - 指摘されたのを修正したバージョン - Qiita

    #!/usr/bin/env perl use strict; use warnings; use Time::Piece; use Time::Seconds; # Time::Pieceオブジェクトの取得 print "Time::Piece ",$Time::Piece::VERSION,"\n"; my $t; # $t = "2014-01-29"; # 入力パラメータとかで渡ってきたとする。 if ($t) { $t = localtime( Time::Piece->strptime($t, '%Y-%m-%d') ); } else { $t = localtime; # 渡ってこなければ現在時刻 } # 日付や時刻の情報の表示 print $t->ymd,"\n"; # $t += ONE_MONTH; # 一ヶ月後 $t = $t->add_months(1); pri

    perl で時刻計算 - Time::Piece編 - 指摘されたのを修正したバージョン - Qiita
    pero_0104
    pero_0104 2017/01/24
    こんなかんたんに一ヵ月後出せるんだねー
  • http://www.g-ishihara.com/perl/array01.html

  • 実行されている Perl スクリプトの絶対パスを取得する方法が知りたいです。…

    実行されている Perl スクリプトの絶対パスを取得する方法が知りたいです。 __FILE__ でファイル名を取得できることは知っているのですが、取得したファイル名を探す処理を入れるべきなのか、CPAN のモジュールですぐに解決できるのか見当がつきません。 ググッては見たのですが、該当する結果が得られませんでした。

    pero_0104
    pero_0104 2016/12/22
    “実パスを表示”
  • XML::Simple - XMLデータの読み込みと書き出し

    [Perl] 簡単なXMLデータであればXMLデータをツリー構造体として扱うXML::Simpleを使用できる。XML::Simpleではデータ読み込みのためのXMLinと書き出しのためのXMLoutを提供してくれる。以下AWS(Amazon Web Service)にてデータを取得する例 #!/usr/bin/perl my $dev_key = 'Dev Token or Subscription ID Here'; my $af_tag = 'Associate Tag Here'; my $keyword = shift @ARGV or die "Usage: perl amazon_http.pl <keyword>\n"; my $url = "http://webservices.amazon.co.jp/onca/xml3?dev-t=" . $dev_key . "&t

  • remora.cx

    This domain may be for sale!

  • Perl 文字コードを推測する, Encode::Guess (0x290)

    目次 - Perl Index Theme Perl について、復習を兼ねて断片的な情報を掲載して行く連載その 0x290 回。 Perl で、処理対象の文字列の文字コード ( コードセット ) が不明な場合に、その文字コードを「 推測 」( guess ) してコードセットの名前を返すモジュール「 Encode::Guess 」の利用法を確認する。 不明な文字コード 前々回 (0x28e) では、起動引数を格納する配列変数「 @ARGV 」の文字コードを、モジュール「 I18N::Langinfo 」を利用して確認しましたが、そこで実際に確認していたのはシステムの「 ロケール 」の文字コードでした。 つまり、「 ロケール 」の情報から間接的に文字コードを推定していたわけで、対象の文字列を直接確認したわけではありません。 対象の文字列を直接確認するためには、モジュール「 Encode::G

    Perl 文字コードを推測する, Encode::Guess (0x290)
  • Perlモジュール徹底解説 - Perl入門ゼミ

    Perl › here Perlのモジュールについての解説です。Perlでいうモジュールとは良く使う機能や便利な機能をプログラムで利用するための仕組みです。 Perlの基文法を覚えたらいろいろなモジュールを使ってみましょう。モジュールを組み合わせると複雑な問題を簡単に解決したり、業務の自動化に役立ったりします。 またCPANと呼ばれるモジュールの配布サイトでは役立つたくさんのモジュールが有志によって登録されており無料で利用することができます。cpanコマンドの使い方についてはCPANモジュールの解説を参考にしてください。 モジュールの作成方法 「パッケージ」などのモジュール作成のための基礎知識を知りたい場合は「モジュールの基礎」を参考にしてください。実際にモジュールを自分で作成してみたい方はModule::Starterモジュールを使って、モジュールのひな型を作成するのが早道です。 モジ

    Perlモジュール徹底解説 - Perl入門ゼミ