タグ

Programmingとperlに関するpipeheadのブックマーク (217)

  • 【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の連続性を保つためで、本音は人々をもてあそぶためと思われる
  • 間接オブジェクト記法のアンチパターン - 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 モジュール
  • 超テスト入門 〜 サブルーチン復習と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 があったら終了する)

  • クリップボード操作 / [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
  • 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

  • 移転しました

    pipehead
    pipehead 2013/01/14
    Memoize モジュール
  • bayashi.net

    {{tag: docomo}} ドコモのキッズケータイ、具体的には京セラの KY-41C で +メッセージアプリが開けなくなったときの対処法。 症状 キッズケータイ KY-41C で +メッセージを開こうとすると「ストレージ容量が不足していて開けない」と言われて+メッセージが起動できなくなる。 原因 エラーメッセージの通り、端末のストレージ容量がいっ... つづきを読む

    bayashi.net
  • perl リファレンスは簡単

    新年度ですね!! サンプルコードは間違ってるかもしれないから、適当にワンライナーにでもして試してね!!! ただのハッシュのコピー まず、リファレンスでないハッシュだと "値" がコピーされるのを実行します! # ただのハッシュですね! my %foo = ( key => 1 ); # コピーしてみますよ! my %bar = %foo; # コピーした先で値を代入してみますよ! $bar{key} = 2; # おおもとの方は書き換わってませんね!あたりまえですね! print $foo{key}; # 1 こういうのがリファレンス HASH my $foo = { key => 1 }; print ref($foo); ARRAY my $bar = [1, 2, 3, 4]; print ref($bar); SCALAR my $baz = 123; my $hoge = \$b

    perl リファレンスは簡単
  • 第7回 新人さんのための仕事で使えるPerl基礎知識(3) | gihyo.jp

    リファレンス/デリファレンス (3)では、仕事Perlを使ううえで必ずと言っていいほど使用するにもかかわらず、つまずきがちなリファレンスとデリファレンスについて解説します。筆者も最初に教えてもらった際にはちゃんと理解できていませんでしたが、使っていくうちに徐々に体系的に理解できるようになりました。 リファレンス 配列やハッシュといった変数をサブルーチンへの引数としてそのまま使うと、少々困ったことになってしまいます。たとえば次のコードを書いたとします。 sub foo { my(@arg_a, @arg_b) = @_; } my @a = (1, 2, 3); my @b = (4, 5, 6); foo(@a, @b); こういったコードを書いたときに、サブルーチンfooの引数に渡される値として、@arg_aには@aの内容が、@arg_bには@bの内容が入ることが期待されますが、実際に

    第7回 新人さんのための仕事で使えるPerl基礎知識(3) | gihyo.jp
    pipehead
    pipehead 2011/06/03
    リファレンス, デリファレンス