タグ

perlに関するpipeheadのブックマーク (230)

  • Unicodeプロパティを使ったPerl正規表現 - Hatena Developer Blog

    こんにちは、Webアプリケーションエンジニアのid:nanto_viです。 Webアプリケーションを作っていると、「全角文字と半角文字を統一したい」「ユーザーの入力から漢字を抜き出したい」といったテキスト処理を行う場面にたびたび遭遇します。はてなではWebアプリケーションのサーバー側プログラミング言語としてPerlを多く使っていますが、PerlならこのようなときにUnicodeプロパティを用いた正規表現パターンで柔軟な処理が可能です。 Unicodeプロパティ 現在、ほとんどのプラットフォームで採用されている文字集合がUnicodeです。Unicodeでは文字だけでなくその文字の様々な特性(プロパティ)も定められており、テキスト処理の基礎情報として活用できます。 Perl正規表現でのUnicodeプロパティの利用 Perlの正規表現では、\p{Property_Name=Value}のよう

    Unicodeプロパティを使ったPerl正規表現 - Hatena Developer Blog
  • 【2016年度版】このPerlハマりどころがすごい!100連発 - Hatena Developer Blog

    はじめに autovivificationを避ける myと後置ifを同時に使ってはならない return;で返る値は空のリスト 正規表現によるバリデーションでは\Aと\zを使おう '0' は偽で評価される each は中断した時、中断した時点の状態が残り続ける おわりに はじめに こんにちは。アプリケーションエンジニアの id:t_kyt です。 春です。Perlを始めるにはいい季節ですね。Perl始めていますか? どの言語にもハマりどころというものがありますがPerlも例外ではありません。というわけで今回はPerlを始めた人がハマりがちなポイントを幾つか紹介したいと思います。 この記事ははてなの教科書程度の知識を前提としています。またモジュールに依存しない部分に絞りました。 github.com autovivificationを避ける autovivificationとはundefの入

    【2016年度版】このPerlハマりどころがすごい!100連発 - Hatena Developer Blog
  • セカンドシステム症候群にまつわる3つの話―Perl 6, Python 3, PHP 6 | POSTD

    この10年間で、3つのメジャーなプログラミング言語が、それぞれPerl 6、Python 3、PHP 6へと大幅なバージョンアップに乗り出しました。ところが、Unicodeのサポート問題などの表面的な類似点があるにも関わらず、根的に異なった展開を見せています。 今年Perl 6.0.0が公式にリリースされるのに伴い、いま一度振り返って、リリース後の展開について考えてみるのに、今はちょうどいいタイミングでしょう。 これを書いていることが自分でも信じられないのですが、PHPから学ぶべきことがあるかどうか見ていきましょう。Zend TechnologiesのCEOであるAndi Gutmans氏は2008年2月の インタビュー でこう答えています。 我々はPHP 6に対し長いサイクルでのロールアウトを予想している。Perlプロジェクトに対しては、プロジェクトのコントリビューターがいまだPerl

    セカンドシステム症候群にまつわる3つの話―Perl 6, Python 3, PHP 6 | POSTD
    pipehead
    pipehead 2015/06/09
    /* http://blog.brentlaabs.com/2015/05/three-tales-of-second-system-syndrome.html の和訳 */ > print()関数を採用しprintは削除。この対処が実施された理由としては、建前上はAPIの連続性を保つためで、本音は人々をもてあそぶためと思われる
  • 環境に依存しないワンライナーを書くならsedよりperlの方がいい - Qiita

    まえがき sedで環境に依存しないワンライナーを書きたかったけど、BSDとGNUの実装で微妙に挙動が違うせいで難しかった。で、いっそのことperlで書いた方がいいのでは、という結論になった。ぐぐったらperlのワンライナーの書き方出てくるけど何でそう動くのか分からなかったのでそれも調べた。そこらへんについてまとめる。 GNU sedとBSD sedの違い、perlからsedへの乗り換え方簡易版、その詳細、という感じでまとめたので知りたいところからどうぞ。 sedにはGNU sedとBSD sedがある sedで とかしようとすると実行する環境によって失敗する。 sedにはBSDの実装とGNUの実装があるからだ。-EはBSD sedで拡張正規表現を使うオプションで、GNU sedで拡張正規表現を使いたければ-rを使う必要がある。 じゃあ拡張正規表現を使わずにデフォルトの正規表現を使えばいいの

    環境に依存しないワンライナーを書くならsedよりperlの方がいい - Qiita
  • [perl] epoch 秒っぽいやつを置換する - tokuhirom's blog

    https://metacpan.org/pod/from_unixtime をみてやってみた。 > cat sql_result id 1 created_at 1419702037 updated_at 1419702037 > perl -MTime::Piece -pe 's/\b(1[0-9]{9})\b/"$1(".localtime($1)->strftime("%F %T").")"/ge' < sql_result id 1 created_at 1419702037(2014-12-28 02:40:37) updated_at 1419702037(2014-12-28 02:40:37) 自分の場合だとこんぐらいのワンライナーでいいかな、と。 上記の正規表現は極めて雑だが、以下のように、一般的に求めたい範囲の unix time にはそれなりにマッチする。 > ep

  • 間接オブジェクト記法のアンチパターン - Blog::kobaken

    この記事は Perl Advent Calendar 2014 の 17日目 の記事です。 16日目の記事は magnolia_k_ さんの perlの関数を第一級オブジェクトとして扱う話 でした 目次 はじめに 間接オブジェクト記法ってそもそも何? 間接オブジェクト記法が活きる例 ハマる例1 Try::Tiny のuse 漏れ 余談 code block ハマる例2? UNIVERSAL ハマる例3 テストにて まとめ 明日 はじめに 15日目の記事の id:akihiro0228 さんの記事を読んで、 自分がよくハマってしまう間接オブジェクト記法について紹介したいと思います。 便乗です! 間接オブジェクト記法ってそもそも何? メソッドを呼び出しの別表現です $obj->method($a, $b); # 普段の呼び出し method $obj $a, $b; # 間接オブジェクト記法

    間接オブジェクト記法のアンチパターン - Blog::kobaken
  • perlの関数を第一級オブジェクトとして扱う話 - Qiita

    このエントリは、perl advent calender 2014の16日目の記事です。 最近、関数型言語が流行っていますね。ちゃんと勉強しないとなーと思いつつ、あんまりコードをバリバリ書くまでは至ってないです。 で、関数型言語の特徴で、必ず出てくるのが「関数が第一級オブジェクトである」というやつなんですが、実はperlも関数を「第一級オブジェクト」として扱うことができます。 今回は、perlで関数を「第一級オブジェクト」として使う方法とか、その使い方を紹介してみます。 (でもperlは関数型言語ではないですよ) 第一級オブジェクトとは? 実際のコードの前に、まずは「第一級オブジェクト」って何でしょう? Wikipediaによると、こんな事が書かれています。 第一級オブジェクト(ファーストクラスオブジェクト、first-class object)は、あるプログラミング言語において、たとえば

    perlの関数を第一級オブジェクトとして扱う話 - Qiita
    pipehead
    pipehead 2014/12/16
    シンボリックリファレンスで無名関数に名前を付ける
  • Perlを分かってそうで分かってない人が陥るアンチパターン - Akihiro's Programmer Blog

    この記事は Perl Advent Calendar 2014 の 15日目 の記事です。 14日目の記事は karupanerura さんの Carton時代の必須インストールモジュール(Webアプリ編) でした。 目次 はじめに $classと$self mapの使い所 doブロック内でreturn 終わりに 明日は はじめに はじめに言っておきますが、Perlを分かってそうで分かってない人 = 僕 です。 この記事では、Perlの扱いにある程度慣れてきたけれど、実はあんまり理解せず使っています、という方が陥るであろうミスをアンチパターン形式で紹介する。と見せかけて僕の恥ずかしい失敗というか、勘違いを書いていきます。 $classと$self Perlでメソッドを定義するとき、私は全てこういう風に書き始めていました。 sub method { my $class = shift; #

    Perlを分かってそうで分かってない人が陥るアンチパターン - Akihiro's Programmer Blog
  • Perlでベンチマーク - みひゃろぐ

    Perl Advent Calendar 2014の枠が空いていたので、ただのメモですが10日目の記事として晒すことに。 今さらかなり基的なことだけど、Perlでのベンチマークの実行方法を調べて、適当にいろいろ試してみたメモ。 Benchmarkモジュール 基的にはperldocを見れば良い。 ゆとりなのでPerldoc.jpにて。 いろいろ関数があるけども、よく使いそうな雰囲気なのは次の2つな気がした。 timethis : 特定のコードの実行速度を測る cmpthese : 複数のコードの実行速度を測りつつ比較する timethis DateTimeは遅いって言われているけど、実際にどれくらい遅いのか試しに測ってみる。 現在の時間を取得して1日足すという処理を例に。 timethisの1つ目の引数は、2つ目の引数の処理を実行する回数を示している。 第2引数には、CodeRefかev

    Perlでベンチマーク - みひゃろぐ
    pipehead
    pipehead 2014/12/10
    Benchmark モジュール
  • perldocべんりってはなし - Qiita

    だいたいどんな内容が見れるのか興味がある方はこちら。 http://perldoc.perl.org/perl.html http://perldoc.jp/docs/perl/5.16.1/perl.pod perldoc.jpとは しれっとperldoc.jpのリンクを滲ませましたがperldocの内容を日語に翻訳するプロジェクトが存在します。それがperldoc.jpです。 有志の方々の努力により保守・運用されている、大変有難いものです。ドキュメントの原文と共に是非活用してください。 http://perldoc.jp/ 便利情報 Perl入学式で講師も務めた @xtetsuji さんがChromeで使える便利テクニックを紹介しています。http://post.tetsuji.jp/2014/01/perldoc-jp-shortcut-to-search/ こちらも是非ご活用下さ

    perldocべんりってはなし - Qiita
  • 超テスト入門 〜 サブルーチン復習とrequire, use - Qiita

    この記事は Perl入学式 Advent Calendar 2014 の 5日目です。 こんにちは。サポーターさせていただいてます まっすー(@trapple )です。 今日は昨日までと少し流れを変えて、普段のPerl入学式と同じような内容で行きたいと思います。 今年のPerl入学式の進行具合ですと、第4回サブルーチン/正規表現が終わったり終わらなかったりな進行具合だと思います。 今回はそのサブルーチンをちょっと発展させた内容になります。 サブルーチンまだ習ってないよ! or 忘れちゃったよ!って人はまずは講義資料に目を通してみてください。 復習問題 それでは簡単な復習問題からスタートします。 mon, tue, wedといった3文字英語表記の曜日を引数として受け取り、月曜日, 火曜日, 水曜日といった日語3文字表記の曜日を返すサブルーチンtranslate()を作ってください。 標準入

    超テスト入門 〜 サブルーチン復習とrequire, use - Qiita
  • Perlの正規表現で条件分岐する方法

    Perlの正規表現で条件分岐する方法を紹介します。 1.Perlの正規表現で条件分岐する たとえば文字列の先頭に「"」が存在する場合、文字列の末尾に「"」が必須であるパターンと、「"」がないパターン、 "foo" と foo の両方にマッチさせたい場合の正規表現は次のようになります。 ^(")?(?(1)\w+"|\w+)$ サンプルコード #!/usr/bin/perl use strict; use warnings; my $str = '"aaa"'; if ( $str =~ /^(")?(?(1)\w+"|\w+)$/ ) { print "match"; } else { print "not match"; } 解説です。まず、 ^(")? で、先頭にダブルクォーテーション「"」が1文字(または0文字)存在することを判定します。 次に、 (?(1) で、グループ(ここでは1

    Perlの正規表現で条件分岐する方法
    pipehead
    pipehead 2014/09/19
    > "foo" と foo の両方にマッチさせたい場合の正規表現は次のようになります。 ^(")?(?(1)\w+"|\w+)$
  • Hata's Perl Hut: 小数の四捨五入・切り捨てに関する都市伝説を斬る!

    10 年以上、Perl を使っていますが、浮動小数点数を int() で整数にすれば、必ず小数点以下は切り捨てられるのかと思って、いつもそうしてきました。 しかし、これ、間違いでした…… orz 真相発覚の顛末 CPAN の方に、ごく少数のモジュールを公開しているのですが、テストのエラー報告を見ていると、どうもおかしい。 # Failed test 'daily quote' # at t/Quote.t line 69. # got: '2001-01-12 340 340 340 340 7800' # expected: '2001-01-12 340 341 340 340 7800' # Failed test 'daily quote' # at t/Quote.t line 69. # got: '2001-03-23 395 395 390 390 6240' # expe

    pipehead
    pipehead 2014/07/13
    > $rounded = int($number + 0.50000000000008);
  • Perlで配列をソートした後で先頭からn個の要素がほしかった - Qiita

    use strict; use warnings; use Data::Dumper; my $array_ref = [5,8,3,10,50,4,68,41,11]; my $array_ref2 = []; @{$array_ref2} = sort { $b <=> $a } @{$array_ref}; splice @{$array_ref2}, 5; print Data::Dumper::Dumper $array_ref2; exit; 何がしたいのかはわかるのですが、2行も使うような内容でもないかな、という気持ちでした。 意外とこういう処理ってよくやるような気がするので、もっとすっきりしたかったのです。 いろいろ試したら、こんな風にもかけました。 use strict; use warnings; use Data::Dumper; my $array_ref = [5

    Perlで配列をソートした後で先頭からn個の要素がほしかった - Qiita
    pipehead
    pipehead 2014/06/17
    > 単純にsortとspliceで書くと2行になって嫌だった
  • 置換時に式を評価する / [perl][正規表現] | 戯術者の日記

    /e で。割とよく使われてるはずだからサンプルだけ C/C++ ソースの #ifdef を削る。 @define = qw/__DEBUG __WRITELOG/; # define を指定する # $src にソースを丸ごとつっこむ # #if-#endif $src =~ s|^#if\s+(\w+)(.*?)^(#else(.*?))?^#endif|($1)?$2:$4|emsg; # #ifdef-#endif $src =~ s|^#ifdef\s+(\w+)(.*?)^(#else(.*?))?^#endif|(grep {$_ eq $1 } @define)?$2:$4|emsg; # #ifndef-#endif $src =~ s|^#ifndef\s+(\w+)(.*?)^(#else(.*?))?^#endif|(grep {$_ eq $1 } @define)

  • 可変長引数 / [programming][c] | 戯術者の日記

    めも 各変数を自前で取り出して使う場合 #include <stdarg.h> /* 引数を全部足して返す */ int sumall(int n, ...) { va_list ap; int total = n; int n_tmp = 0; va_start(ap, n); /* 最後の固定変数を指定し,最初の可変長引数をセットする */ while ((n_tmp = va_arg(ap, int)) != 0) { total += n_tmp; /* 型を指定することで引数を一つ取り出す. ap には次の引数がセット */ } va_end(ap); /* 後始末 */ return total; } というわけで,va_xxx には「引数の最後」が何かを知る術はないようなので,固定引数部分に引数の個数を入れるか,番兵を使うかするっぽい.(上のコードは 0 があったら終了する)

  • LWPでリクエストヘッダ付 Web アクセス(proxy込) / [HTTP][perl] | 戯術者の日記

    use LWP::UserAgent; use HTTP::Request; my $ua = LWP::UserAgent->new; my $req = HTTP::Request->new( GET => 'http://www.example.org/' ); $ua->agent("perl-wget"); $ua->proxy('http', 'http://proxy.example.org:8080'); $req->header( 'X-Header1' => 'hoge', 'X-Header2' => 'foobar', ); my $res = $ua->request($req); $res->as_string; // レスポンス(ヘッダ+ボディ)は $res->headers_as_string; // レスポンスヘッダ $res->content; // レ

  • printfのフォーマットで桁数を変数指定 / [programming][perl][c] | 戯術者の日記

    * を使う printf("%*d", width, val); で,width で桁数を指定できる. width を負の数にすれば,左寄せも可. Perl でもまったくおんなじ printf("%0*d\n", $width, $val); こっちはゼロ詰指定 前のエントリ: static 変数 static 関数 [c] 次のエントリ: 可変長引数 [c] 2013 : 01 02 03 04 05 06 07 08 09 10 11 12 2012 : 01 02 03 04 05 06 07 08 09 10 11 12 2011 : 01 02 03 04 05 06 07 08 09 10 11 12 2010 : 01 02 03 04 05 06 07 08 09 10 11 12 2009 : 01 02 03 04 05 06 07 08 09 10 11 12 200

  • ActivePerlでLF(0x0a)単体の出力 / [win][programming][perl] | 戯術者の日記

    ActivePerlだと、"\n"は当然、"\x0a"でも、出力時に 0x0d が着いちゃうんだよね。 0x0a 単体を出力するには、(UNIX/Linux作業時は半ばおまじないと化していた) binmode を使用する。 binmode STDOUT; print "\n"; これで 0x0a 単体。 ファイルハンドル出力なら open F, "> file.txt" or die; binmode F; print F "\n"; close F; もはや Windows 上での開発(C/C++)のソース解析・修正用にしか使ってないな・・・<Perl 前のエントリ: GD::Barcode::QRcodeでQRコード作成 [perl] 次のエントリ: ActivePerlはワイルドカード&<>が使えん [perl] 2013 : 01 02 03 04 05 06 07 08 09 1

  • クリップボード操作 / [win][perl] | 戯術者の日記

    Win32モジュール使用 テキストをセット use Win32::Clipboard; Win32::Clipboard("foo\nbar"); または $clip = Win32::Clipboard(); $clip->Set("foo\nbar"); テキストのゲット $getstring = $clip->GetText(); テキスト以外でもとにかくクリップボードの中をゲット $buffer = $clip->Get(); クリップボードの内容の消去 $clip->Empty(); ターミナルへの表示をマウスでコピペするのが嫌で STDIN をクリップボードにセットするスクリプトを書いたが、cygwin 環境のためか割りと重い… というか、悲しいくらいデリファレンスの書き方を忘れてる orz 前のエントリ: diff オプション再帰編 [command] 次のエントリ: タブ幅

    pipehead
    pipehead 2013/05/02
    Win32::Clipboard