タグ

Perlに関するkicyonのブックマーク (190)

  • perl-mongers.org

    This domain may be for sale!

  • Perlゼミ(サンプルコードPerl入門)

    Perl入学式 全6回のPerl入門講座。東京、大阪、沖縄、札幌で開催。(東京は4月と10月スタート、それ以外は5月スタート) YAPC::Japan Perlを軸としたITに関わる全ての人のためのカンファレンス。 東京 吉祥寺.pm 五反田.pm 大阪 なにわPerl 沖縄 沖縄.pm

    kicyon
    kicyon 2010/02/15
    前一致は$` マッチした文字は$& 後一致は$'に格納される
  • Perlシグナル処理 - D-6 [相変わらず根無し]

    Perlシグナル処理 思い立ったので適当に書いてみる Perlのシグナルハンドラは%SIGグローバル変数にシグナル毎のハンドラを設定することで実現できる。例えばCtrl-CはSIGINTを発生させるので、INT用のハンドラを設定する: $SIG{ INT } = sub { warn "got SIGINT!" }; %SIGに限った事ではないのだけれども、ここでまず注意しなくてはいけないのが、%SIGはグローバル変数であること。ある関数foo()内で%SIGをいじったあとにreturnすると、foo()を呼び出したスコープでもその値は有効になってしまう。これだと自分はよくても他のモジュール等に影響を与える可能性がある。そこでまず癖としてlocal修飾子を使う癖をつけてほしい local $SIG{INT} = sub { warn "got SIGINT (OUTSIDE)" }; su

  • Plack - Perlウェブサーバー - D-6 [相変わらず根無し]

    Plack - Perlウェブサーバー 検索エンジンの皆様こんにちは。2010年以降のPerlウェブサーバーといえばPlack/PSGIですね。そんなSEOな記事です。 私がPerlでWebアプリ的な物を初めて書いたのは1999~2000年にかけての事なのでそれ以来ほぼ10年たっているわけです。その間に色々さわりました。ウェブサーバーとアプリをつなぐアダプターのレイヤーとしてはCGI.pm, mod_perl, FastCGIなどを使ってきました。フレームワークもMason, Sledge, Catalyst, AxKitなんかをさわってきました。 どれもこれもいいところもあり悪いところもあり、それぞれコメントしたい部分はあるのですが、とにかくデプロイ方式が全然違うのでどうにもできん、という問題がずっとありました。 しかし PSGIというPerlウェブアプリケーション用の規格ができたことに

  • my と local のサンプル - IT戦記

    local と my - IT戦記の続き local と my の違いが分かるサンプルを書いてみた our $foo = 0; do { # ... (1) local $foo = 1; do { print "$foo\n" }; # 1 sub { print "$foo\n" } # 0 }->(); do { # ... (2) my $foo = 1; do { print "$foo\n" }; # 1 sub { print "$foo\n" } # 1 }->(); ちなみに do {...} は return の扱いを除いて (sub {...})->() と等価だと考えていいです。まあ、関数をその場で呼び出すようなものですね。単なる {...} との違いは、 {...} が式ではなくて文(ブロック)であって、 do {...} は式(do 関数の呼出し)というところで

    my と local のサンプル - IT戦記
    kicyon
    kicyon 2010/02/11
    my, local
  • すっきりした>< - YoshioriのBlog

    id:tokuhirom に Perl の local と my と our を凄く簡潔に分かり易い言葉で教えてもらいました。 our 名前をスコープに限定. local 値をスコープに限定. my 名前と値の両方をスコープに限定 追記 元ネタは早川さんだそうです>< →PowerPoint プレゼンテーション とくひろむーさん、早川さん、ありがとうございます。 で、ついでに実践してみました。 $foo = "global"; sub func{ print "func $foo\n"; } sub test1{ my $foo = "my"; func(); } sub test2{ local $foo = "local"; func(); } test1(); print "after my $foo\n"; test2(); print "after local $foo\n";

    すっきりした>< - YoshioriのBlog
    kicyon
    kicyon 2010/02/11
    my, local
  • local と my - IT戦記

    すっきりした>< - 宇宙行きたい このエントリの our 名前をスコープに限定. local 値をスコープに限定. my 名前と値の両方をスコープに限定 は、ものすごく分かりやすいし正しいと思うんですけど、たぶん昔の僕だったら理解出来なかったかもしれません>< our 名前をソース上のスコープに限定. local 値をスタック上のスコープに限定. my 名前と値の両方をソース上のスコープに限定 なら、理解しやすいと思います>< 今でも local 宣言のあるスコープ内で関数呼出しがあると混乱するの僕なのです>< 追記 弾さんが反応してるので、追記 404 Blog Not Found:perl - myとourとscopeと えっと 僕の「ソース上のスコープ」という言葉が良くなかったです><ごめんなさい そういう意味で言ったわけではなくて、「ソース上の(なんらかの記述の位置で決まる範囲の

    local と my - IT戦記
    kicyon
    kicyon 2010/02/11
    my, local
  • Perl Tips

    use stirct 'vars'; とした場合、或いは単に use strict; とした場合、グローバル変数は全てパッケージ名で完全に修飾しなければなりません。 例(1): #!/usr/local/bin/perl use strict; my $var1; $main::var1 = 3; subroutine(); sub subroutine { print "var1 = $main::var1\n"; } これが面倒な場合は以下のようにすれば記述の負担を減らすことができます。 例(2): #!/usr/local/bin/perl use strict; use vars qw($var1 @arr1); my $var1 = 3; my @arr1 = (1, 2, 3); subroutine(); sub subroutine { print "var1 = $var

    kicyon
    kicyon 2010/02/11
    use vars
  • perl - myとourとscopeと : 404 Blog Not Found

    2008年01月10日10:15 カテゴリLightweight Languages perl - myとourとscopeと うーん、微妙に違います。 local と my - IT戦記 our 名前をソース上のスコープに限定. local 値をスタック上のスコープに限定. my 名前と値の両方をソース上のスコープに限定 なら、理解しやすいと思います>< 以下のコードを見てみましょう。何と表示されるでしょうか。 { package Foo; our $bar = 'baz'; } our $bar = 'drink'; warn $bar; warn $Foo::bar; 「ソースに限定する」あるいは「ファイルに限定する」のだとしたら、この挙動はありえないはずです。 ここで、Perlのスコープに関するルールを覚えておきましょう。すっごく簡単です。 {}は、問答無用でスコープを作る = b

    perl - myとourとscopeと : 404 Blog Not Found
    kicyon
    kicyon 2010/02/11
    my, our
  • [Perl] my と local と our の違いについて - 竹迫の近況報告

    404 Blog Not Found:perl - myとourとscopeと みんな難しく考えすぎです。 (例外については後で考えることにして)とりあえず以下の基をおさえておけば混乱することはないと思います。 ■ our 宣言について our はグローバル変数をスマートに使用するための宣言です。our は use vars と等価と考えてください。 our $var; は use vars qw($var); と等価。 our $var = 1; は use vars qw($var); $var = 1; と同じ動きをするもの、と覚えておけばOKです。それ以上の違いは基的にないと考えて構いません。 ひとつ実用上の違いがあるとすれば、our は Perl 5.6 以降の built-in なのに対して、use vars は vars.pmPerlスクリプトで実装されています。し

    [Perl] my と local と our の違いについて - 竹迫の近況報告
    kicyon
    kicyon 2010/02/11
    my, local, ourの違い
  • substr関数 - 文字列の切り出し・置換 - Perl入門ゼミ

    Perl › 関数 › here substr関数を使用すると、指定した位置の文字を切り出す、あるいは置換することができます。第1引数は文字列、第2引数は開始位置、第3引数は切り出す長さです。開始位置は0から始まります。第3引数を省略した場合は文字列の末尾までが対象になります。 my $word_like = substr($message, 2, 4); 指定した位置の文字を置換するするには、第4引数に文字列を指定します。 substr($message, 2, 4, 'want to eat'); substr関数のサンプルプログラム substr関数を使って、指定した位置の文字を切り出すサンプルです。以下の例では文字列「Ken」が抽出されます。 # 指定した位置の文字を切り出す。切り出される文字列は「Ken」。 my $message = "I'm Ken"; my $name =

    substr関数 - 文字列の切り出し・置換 - Perl入門ゼミ
    kicyon
    kicyon 2010/02/11
    substr($msg, 開始位置, 文字数)で文字の抽出ができる
  • Perlゼミ(サンプルコードPerl入門)

    Perl入学式 全6回のPerl入門講座。東京、大阪、沖縄、札幌で開催。(東京は4月と10月スタート、それ以外は5月スタート) YAPC::Japan Perlを軸としたITに関わる全ての人のためのカンファレンス。 東京 吉祥寺.pm 五反田.pm 大阪 なにわPerl 沖縄 沖縄.pm

    kicyon
    kicyon 2010/02/11
    数値変換:2->10はoct関数に0bのついた数値を渡す。8->10はoct関数を渡す。16->10はhex関数を使う
  • perlで四捨五入 - end0tknr's kipple - web写経開発

    sprintf() による四捨五入は避けるべきでは http://d.hatena.ne.jp/perlcodesample/20080922/1222147231 「サンプルコードによるPerl入門」は、よく参考にしていますが、sprintf() による四捨五入には疑問に思うことがありました。「四捨五入を行うには、sprintf関数を使用します」と紹介しておきながら、次のようなことも書かれています。 数値リテラルで表現した0.725は、内部的には0.725ではない為、 sprintf( "%.2f", $num2)は 0.73 にはなりません。次のようなscriptで実験を行ってみても、確かに sprintf( "%.2f", $num2)は 0.73 にはなりません。 #!perl use strict; use warnings; for my $val (qw/0.723 0.72

    perlで四捨五入 - end0tknr's kipple - web写経開発
    kicyon
    kicyon 2010/02/11
    Perlで四捨五入。Math::Round::nearest。
  • 四捨五入を行う - Perl入門ゼミ

    Perl › 数値 › here 四捨五入を行うには、sprintf関数を使用します。フォーマット指定を、有効桁を指定して四捨五入したい場合は"%.3g"や"%.5g"のように指定し、小数点以下のある桁で四捨五入したい場合は"%.3f"や"%.5f"のように指定します。 # 小数点以下の桁数で指定。 sprintf("%.1f", $num1); # 有効桁数で指定。 sprintf("%.1g", $num1); 四捨五入を行うには、sprintf関数を使用します。"%.1f"という書式指定は、浮動小数点を小数点第1までに丸めるという書式指定です。小数点第2位が四捨五入されます。 有効桁数を指定して四捨五入を行いたい場合は、"%.1g"のように指定します。たとえば37.48を、"%.3g"で書式指定をすると、37.5という数値が得られます。 四捨五入の注意点 my $num2 = 0.7

    四捨五入を行う - Perl入門ゼミ
    kicyon
    kicyon 2010/02/11
    Perlで四捨五入を行うにはsprintfではなくMath::Round::nearestを使うとよい。
  • 浮動小数点を比較する - Perl入門ゼミ

    Perl › 数値 › 浮動小数点の比較 コンピュータは内部的には2進数を使って演算しているので、2進数で表現できない小数については計算の過程で誤差が生まれます。2進数の演算の過程で発生した誤差の影響を無視するためには、ある有効桁で数値を丸めて比較する必要があります。 桁を丸めるにはsprintf関数を使用します。 sprintf("%.5g", $num1); "%.5g" は浮動小数点を有効桁5桁に丸めるという書式指定です。 サンプルプログラム 浮動小数点を比較するサンプルです。 use strict; use warnings; my $num1 = 1; my $num2; # 0.1を10回加算 for my $i (1 .. 10){ $num2 += 0.1; } print "(1)誤差が生まれる。\n"; if ($num1 != $num2) { print '$num

    浮動小数点を比較する - Perl入門ゼミ
    kicyon
    kicyon 2010/02/11
    小数点を丸めるにはsprintfを使う
  • 数値と誤差 - Perl入門ゼミ

    Perl › 数値 › 誤差 小数をコンピュータで表現するには誤差が問題になります。2進数で表現できない小数は誤差が発生します。 コンピュータは数値を内部的には2進数としてしか表現できません。整数についてはどんな数でも2進数として表現できます。 問題になるのは小数です。2進数で表現できる少数は、0.5, 0.25, 0.125, 0.0625 ( 順に、1/2, 1/4, 1/8, 1/16 ) などの1/2のn乗で表現される数と、これらの和で表現される数( たとえば 0.75 )だけです。 0.3 というのはいくら2を乗算しても整数になりませんから、2進数で正確に表現することができません。コンピュータはこのような数を近似することによって何とか扱います。0.3は、2進数を使って以下のように近似されます。 0.3  = 1/4 + 1/32 + 1/64 + 1/512 = 0.25 + 0

    数値と誤差 - Perl入門ゼミ
    kicyon
    kicyon 2010/02/11
    数値を扱うときは1/2のべき乗しか表現できないため、0.1, 0.3などは正確に出すことができず、限りなく近い極限値をとるしかなくなる。
  • 文字列が整数を表現しているかを判定する - Perl入門ゼミ

    Perl › 数値 › here 文字列が整数を表現しているかを判定するには、正規表現を利用します。正規表現で最初から終わりまで数字でできているかどうかを判定します。 /^[0-9]+$/ 整数であるかどうかを判定するには上記の正規表現に、先頭に+か-が指定されてもかまわないということを付け加えるだけです。 /^[+-]?[0-9]+$/ サンプル 変数が数値かどうかを判定するサンプルです。 use strict; use warnings; print "1: 文字列が正しい数値を表現しているかを判定する\n"; my $num1 = "345"; # 文字列が数字のみであるかどうかの判定 # 「先頭から数字がひとつ以上続いて末尾にいたる」と読む if ($num1 =~ /^[0-9]+$/) { print "$num1は数字のみの文字列です。\n"; } # 整数であるかどうかの判

    文字列が整数を表現しているかを判定する - Perl入門ゼミ
    kicyon
    kicyon 2010/02/11
    Regexp::Common::numberとかも見る。
  • require - モジュールを実行時に読み込む - Perl入門ゼミ

    Perl › 構文 › here 実行時にモジュールを読み込むにはrequireを使用します。useがコンパイル時にモジュールを読み込むのに対して、requireは実行時に読み込みます。 # モジュールの読み込み require モジュール名 モジュール名は裸の文字列で指定する必要があります。クォートやダブルクォートで囲んだ文字列は受け付けません。また変数も受け付けません。 # 裸の文字列でモジュール名を指定 require CGI; モジュールを読み込むと、完全修飾名を使って、読み込んだモジュールに記述されている関数を使用することができるようになります。 require Carp; # 完全修飾名でCarpモジュールのcroak関数を使用できる。 Carp::croak("croak 関数"); モジュールを読み込む場合はuseを使用するのが標準的な方法ですが、requireを使いたい場

    require - モジュールを実行時に読み込む - Perl入門ゼミ
    kicyon
    kicyon 2010/02/10
    requireを使うのは、場合によって読み込むモジュールを変更したいときが便利
  • use - モジュールを読み込む - Perl入門ゼミ

    Perl › 構文 › here モジュールをコンパイル時に読み込むにはuseを使用します。 use モジュール名 モジュール名は裸の文字列で指定する必要があります。クォートやダブルクォートで囲んだ文字列は受け付けません。また変数も受付ません。 # 裸の文字列でモジュール名を指定する use CGI; また標準的な慣習としてモジュール名の後ろに関数名を指定すると、関数を現在の名前空間にインポートすることができます。 # 関数のインポート use File::Basename 'basename', 'dirname'; モジュールを読み込む手段としては、useの他にrequire関数がありますが、モジュールを読み込む場合は通常はuseを使っておきましょう。モジュールは、importメソッドを呼ばれることを期待しているので、use を使えば自動で行ってくれます。 useで実行される処理 us

    use - モジュールを読み込む - Perl入門ゼミ
    kicyon
    kicyon 2010/02/10
    use File::Basename = BEGIN{ require File::Basename; File::Basename->import(); }
  • サブルーチンの定義はスコープの影響を受けない - Perl入門ゼミ

    Perl › サブルーチン › here サブルーチンの定義は、スコープの影響を受けません。 { sub func { return 2; } } my $ret = func(); サブルーチンは、スコープの影響を受けません。一見すると、funcは、スコープの外では、見えないものと思ってしまいがちですが、そうなりません。 サブルーチンの定義は、コンパイル時に、シンボルテーブルというものに登録されます。シンボルテーブルは、プログラムのどこからでも参照することができるため、サブルーチンも、プログラムのどこからでも参照できます。 サンプル サブルーチンの定義はスコープの影響を受けないことを理解するサンプルです。 use strict; use warnings; # サブルーチンの定義とスコープ # サブルーチンは、スコープの影響を受けない。 { sub func { return 2; }

    サブルーチンの定義はスコープの影響を受けない - Perl入門ゼミ
    kicyon
    kicyon 2010/02/09
    サブルーチンの定義はコンパイル時にシンボルテーブルに登録されるため、スコープの影響を受けない。