タグ

ブックマーク / chaipa.hateblo.jp (36)

  • URLパラメータとGETパラメータの関係とは - 小池啓仁 ヒロヒト応援ブログ By はてな

    記事は以下が最新です。 URLパラメータとGETパラメータの関係とは(バージョンアップ版) - 燈明日記 URLパラメータは、ブラウザのアドレス欄に表示されるURLの「?」以降の文字列のことです(たぶん)。 GETパラメータは、form要素のmethod属性に"get"と指定してサブミットした時にアドレス欄に表示されるURLの「?」以降の文字列のことです(たぶん)。 通常、form要素のmethod属性に"post"を指定して、action属性にURLパラメータを指定すると、サーバー側では、postのデータは標準入力で、URLパラメータは環境変数で取得することができます。 また、form要素のmethod属性に"get"を指定すると、サーバー側では、環境変数で取得することができます。 では、form要素のmethod属性に"get"を指定して、action属性にURLパラメータを指定する

    URLパラメータとGETパラメータの関係とは - 小池啓仁 ヒロヒト応援ブログ By はてな
    kits
    kits 2010/05/27
    GETメソッドの場合はURLのクエリ文字列にてパラメタを渡すということであり、"URLパラメータ", "GETパラメータ"は単に同じもののように思う。/ action属性のパラメタが無視されるのはブラウザの実装によるような。
  • 想定外エラーはevalでキャッチ! - 小池啓仁 ヒロヒト応援ブログ By はてな

    たとえば、PerlCGIプログラムを組んでいるとします。 ご存知のようにWeb系では想定外のエラーが頻発します。 しかし、ブラウザにはCGIエラーと出るだけで、何のエラーで、何ライン(プログラムソース)で発生したかが分かりません。 そんな時は、ソースをまるごとevalブロックにしてしまうのです。 すると、想定外エラーをキャッチすることができるのです。 また、想定外エラーメッセージは特殊変数『$@』へ入ります。 しかも、プログラムソースの何ラインで発生したかも入っていますよ! つまり、何のエラーで、何ラインでエラーが起きたのかが分かるのです。 eval { # 来のCGIの処理をここに書きます。 }; if ($@) { print "Content-type: text/html\n\n"; print "<html><body><h1>想定外エラー($@)</h1></body></

    想定外エラーはevalでキャッチ! - 小池啓仁 ヒロヒト応援ブログ By はてな
    kits
    kits 2010/04/05
    まずwebサーバのエラーログを見るべきなような。/ ブラウザに表示させる方法としては use CGI::Carp qw(fatalsToBrowser); がある。
  • 漢字コードを指定したファイルコピー - 小池啓仁 ヒロヒト応援ブログ By はてな

    ファイルをコピーするときに、コピー先のファイルの漢字コードを任意にしたい場合が結構あります。 コピー先のファイルは、ロジックで漢字コードが指定できますね。 しかし、コピー元のファイルの漢字コードが想定できない場合が結構あります。 そんな時のためのルーチンを組んでみました。 encCopy関数の仕様は、以下の通り。 第1引数がコピー先ファイルの漢字コード euc-jp,shiftjis,7bit-jis,utf8が指定できる 第2引数がコピー元ファイルパス名(入力ファイル) euc-jp,shiftjis,7bit-jis,utf8の各々の漢字コードのファイルに対応 第3引数がコピー先ファイルパス名(出力ファイル) use strict; use warnings; use Encode::Guess; use Encode qw(from_to); encCopy('euc-jp', 't

    漢字コードを指定したファイルコピー - 小池啓仁 ヒロヒト応援ブログ By はてな
    kits
    kits 2010/03/23
    local $/; だけでも $/ は未定義となります。
  • パス名からファイル名を取得する - 小池啓仁 ヒロヒト応援ブログ By はてな

    正規表現で一発ですね。 しかし、ディレクトリの区切りが『/』と『\』あるので、気をつけないとなりません。 標準モジュールBasenameを使うともっと簡単に出来ますね。 だた、Basenameモジュールのfileparse関数は、リストを返しますので小カッコでスライスして、ファイル名を取得します。 use strict; use warnings; use File::Basename; my $file_path1 = 'C:\Documents and Settings\koike\hoge\fname.pl'; my $file_path2 = '/cygdrive/c/Documents and Settings/koike/hoge/fname.pl'; $file_path1 =~ /(.*\/|.*\\)(.*)$/; print $2, "\n"; $file_path2

    パス名からファイル名を取得する - 小池啓仁 ヒロヒト応援ブログ By はてな
  • ネットワークアドレスを求める! - 小池啓仁 ヒロヒト応援ブログ By はてな

    たとえば、IPアドレス(IPv4)は32ビットで、32ビット内がネットワークアドレスとマシンアドレスになっています。 そして、IPアドレスをサブネットマスクするとネットワークアドレスが求まりますね。 つまり、任意のマシンが、どのネットワークアドレスに属するかは、IPアドレスをサブネットマスクで論理積すれば、分かるのです。 '1'の文字は16進では『31』で2進数では『00110001』です。 '0'の文字は16進では『30』で2進数では『00110000』です。 文字1『00110001』と文字0『00110000』の論理積は、文字0『00110000』になります。 文字1『00110001』と文字1『00110001』の論理積は、文字1『00110001』になります。 一方、Perlではビット演算子の論理積『&』がありますね。 1と0の文字の論理積の場合は、文字列でもビット演算子の論理積

    ネットワークアドレスを求める! - 小池啓仁 ヒロヒト応援ブログ By はてな
    kits
    kits 2010/03/14
    (IP->bin) sprintf "%08b"x4, split /\./, $ip; (bin->IP) join '.', map {oct "0b$_"} $bin=~/(\d{8})(\d{8})(\d{8})(\d{8})/; を考えた。
  • 無名ハッシュの威力 - 小池啓仁 ヒロヒト応援ブログ By はてな

    EXCELとかDBでは、データが表形式なっていて、行と列でデータにアクセスします。 行は配列で表現し、列はハッシュで表現するのが、まぁ普通だと思います。 たとえば、以下の表の感じです。 A列B列C列D列 1行0 1 2 3 2行0 1 2 3 3行0 1 2 3 4行0 1 2 3 まず、列名をハッシュキーにして、一行分のデータをハッシュ変数に格納します。 そして、そのハッシュ変数の内容を無名ハッシュの要素とし、その無名ハッシュのリファレンスを今度は配列の要素として格納します。 すると、ハッシュの配列になり、行は配列数で表現され、列はハッシュ名で表現が出来るのです。 use strict; use warnings; my @col; my %row; for (my $j = 0; $j < 4; $j++) { # 1, 列名をハッシュキーにして一行分のデータをハッシュ変数に格納する

    無名ハッシュの威力 - 小池啓仁 ヒロヒト応援ブログ By はてな
    kits
    kits 2010/03/09
    これは my %row; をforブロックの中に入れて \%row を取るべきところでは。無名かどうかはあまり関係ないと思います。
  • SQLiteを使ってみる!(パート2) - 小池啓仁 ヒロヒト応援ブログ By はてな

    前回のをencode/decodeを使って書き換えてみました。 『from_toはバイト文字列をバイト文字列に変換するのでよくないです』、とのご指摘もありましたので…。 use strict; use warnings; use DBI; use Encode; use utf8; binmode STDOUT, ':encoding(shiftjis)'; # メモリ上のデータベースへ接続 my $dbh = DBI->connect("dbi:SQLite:dbname=:memory:"); # ディスク上のデータベースへ接続 #my $database = 'test.db'; #my $data_source = "dbi:SQLite:dbname=$database"; #my $dbh = DBI->connect($data_source); my $create_tab

    SQLiteを使ってみる!(パート2) - 小池啓仁 ヒロヒト応援ブログ By はてな
    kits
    kits 2010/01/05
    「utf8フラグ」という"用語"で考えるよりも、「Perl内部文字列」 ⇔ 「UTF-8(或いはShift_JIS)文字列」という対比で考えた方がよいと思います。
  • Apacheのprintenv.plには気をつけろ! - 小池啓仁 ヒロヒト応援ブログ By はてな

    Windows用のApache2系をインストールし、CGIの設定をした後、とりあえず、デフォルトで入っているcgi-binのprintenv.plを実行しますが、すると『ファイルのダウンロード』が出て上手く行かない場合があります。 これは、単に表示が上手く行かないだけで、CGIは正常に動いています。 こんな、紛らわしいprintenv.plなど捨てましょう! ご自分でPerlでテスト用のCGIを作ってテストしましょう! ちなみに、printenv.plの『print "Content-type: text/plain; charset=iso-8859-1\n\n";』のiso-8859-1が悪さをしている感じです。もしかしたらIEの方が悪いのかも…

    Apacheのprintenv.plには気をつけろ! - 小池啓仁 ヒロヒト応援ブログ By はてな
    kits
    kits 2009/12/09
    スクリプトそのものには問題なさそうだが。/ 試したところIEがtext/plainをダウンロードしてしまうだけっぽい(結果はダウンロードしたテキストにちゃんと出てる)。
  • SQLiteを使ってみる! - 小池啓仁 ヒロヒト応援ブログ By はてな

    実は、ActivePerl(私のは5.8.8)には、標準でDBが使えるようになっているのです! そう、ActivePerlをインストールしただけで、標準でSQLiteがバンドルされているのです! まさか、SQLが使えるDBが言語のパッケージに入っているとは思ってもいませんでした。 それは、以下を読んで知りました(いつも有用な記事ありがとうございます)。 SQLitePerlで学ぶデータベースとDBIの基礎 折角なので練習がてらに、上記リンク先のサンプルを日語化してみました。 とりあえず、上手く行きましたが…まぁ、とりあえずです(^^; use strict; use warnings; use DBI; use Encode qw(from_to); use utf8; #binmode STDOUT, ':encoding(shiftjis)'; # メモリ上のデータベースへ接続 #

    SQLiteを使ってみる! - 小池啓仁 ヒロヒト応援ブログ By はてな
    kits
    kits 2009/11/30
    「なぜか上手く行かず…」外部に出力(DBに格納)される際には単なるUTF-8文字列となるため、再取得した時には $row[0] = decode('utf8', $row[0]); 等が必要です。
  • 配列の要素をユニークにする! - 小池啓仁 ヒロヒト応援ブログ By はてな

    Linuxのuniqコマンドみたいに配列変数の要素をユニークにしたい場合があります。 しかし、標準関数には残念ながら…そのような関数はありません。 またしかし、柔軟なPerlでは、ちょっと工夫すると既存の関数で出来てしまうのです。 ◆サンプル use strict; use warnings; my @data = ('AAA', 'BBB', 'CCC', 'BBB', 'DDD', 'AAA', 'DDD', 'EEE'); my @uniq = do { my %wk; grep { !$wk{$_}++ } @data }; local $, = ','; print @uniq; ◆解説 do関数は、引数のブロックを実行して、最後に評価した式の値を返します。 grep関数は、引数の配列を検索して条件が真のときにその要素を返します。 今回、grep関数で配列を検索して、初回マッチで

    配列の要素をユニークにする! - 小池啓仁 ヒロヒト応援ブログ By はてな
    kits
    kits 2009/11/18
    undefと''が同一視される問題あり。List::MoreUtils 0.25_02 のuniqでは対処。
  • Perlの謎(その10)サブルーチンの呼び出し方 - 小池啓仁 ヒロヒト応援ブログ By はてな

    予告したサブルーチンの呼び出し方の謎です。 しかし、予告した割りには、上手くまとまらなかったのですが・・・以下のようになりました。 ◆ イントロ まず、Perlでのサブルーチンは関数と等価です。 そして、関数の呼び出し方には、『&』のファニー文字を付けたり、付けなかったり・・・。 また、関数名の後に『()』小カッコを付けたり、付けなかったり・・・。 またまた、『&』も『()』も付けなく、ベアワードになったりと・・・。 これらは、『組み込み関数やインポートしたモジュール関数』と『ユーザ定義関数』で意味が違ってきます。 なので、各々について対比して解説をしてみました。 尚、以下は、あくまでも私のコーディング方針で、強制的なものではありません。 ◆ 『&』ファニー文字について 組み込み関数やインポートしたモジュール関数は、『&』ファニー文字は付けない。 組み込み関数等に『&』を付けるとエラーにな

    Perlの謎(その10)サブルーチンの呼び出し方 - 小池啓仁 ヒロヒト応援ブログ By はてな
    kits
    kits 2009/07/21
    「将来、同名の組み込み関数が出来る可能性もある」5.10ではsay等が追加されているがuse featureを必要としているように、今後デフォルトでの組込み関数が追加される可能性は少ないのでは。
  • 雑記(『Perl謎(その10)サブルーチン』予告) - 小池啓仁 ヒロヒト応援ブログ By はてな

    今日は、歓送迎会があり、今ちょっと前に帰って来ました。 歓送迎会は盛り上がっていましたが、私はメガネを多分飲み屋さんのどこかに無くしてしまってブルーでした。 結局、見つからない・・・。 仕事の方も今日はブルーでした。 ある条件のときは、ハッシュ変数に代入しないので、if (!defined(%hash)) で引っ掛かるはずなのに引っ掛からない・・・。 今、家で同じようなテストプロを作ってテストしたら、間違いなく引っ掛かる。なにが原因なんだろ・・・。 あと、Perlの次の謎は、『サブルーチン』に決定しました。 この間だ、ビンゴさんに教えていたサブルーチンの呼び方は、組み込み関数は小カッコなしで、ユーザ定義関数は『&』無しの小カッコありと教わりました。 しかし、組み込み関数と同名のユーザ定義関数を定義したときは、どうしても『&』付きでないと呼び出せないのです。 これ、わざわざ、組み込み関数と同

    雑記(『Perl謎(その10)サブルーチン』予告) - 小池啓仁 ヒロヒト応援ブログ By はてな
    kits
    kits 2009/07/16
    「if (!defined(%hash)) で引っ掛かるはずなのに引っ掛からない・・・」definedはscalarを調べるものであり、use warningsしていると "defined(%hash) is deprecated" という警告が出ます。 http://perldoc.jp/docs/perl/5.6.1/perldiag.pod
  • Perlの謎(番外編4):『ハッシュの配列』か『配列のハッシュ』か? - 小池啓仁 ヒロヒト応援ブログ By はてな

    まず、以下のソースを見てください。 use strict; use warnings; my @aaa = ({xxx => 101, yyy => 102}, {xxx => 201, yyy => 202}); print $aaa[0]{xxx}, "\n"; print $aaa[0]{yyy}, "\n"; print $aaa[1]{xxx}, "\n"; print $aaa[1]{yyy}, "\n"; 上記のデータ構造は、『ハッシュの配列』でしょうか、それとも『配列のハッシュ』でしょうか・・・。 ラクダでは、『ハッシュの配列』になっていました。 私は、約2年間ずーっと『配列のハッシュ』だと思っていました。だって、式と語順も一緒だし・・・。 昨日、読者の方からご指摘を受け、ラクダで調べたら、確かに『ハッシュの配列』と書かれていたのです! 『ハッシュの配列』は、英語で "

    Perlの謎(番外編4):『ハッシュの配列』か『配列のハッシュ』か? - 小池啓仁 ヒロヒト応援ブログ By はてな
    kits
    kits 2009/07/08
    「配列にデータが入っているとします。…」喩えがおかしい。幾つかの数値がある1つの配列変数に格納されていたら、それは「数値の配列」であって「配列の数値」とは呼べない。
  • foreachのワーク変数には参照が入る!! - 小池啓仁 ヒロヒト応援ブログ By はてな

    配列変数をforeachで処理するときに、配列変数の要素をワーク変数(下のサンプルでは$value)へ格納しますが、これには、値でなく参照が入ります。 ですので、ワーク変数を編集すると、実は配列変数の要素を編集することになり、思わぬ結果が生じることがあるのです(経験者は語る)。 以下のNo.1では、@Nameの要素に対して、文字列『<br>』が外側のループ毎に一つ多く付加される(想定外)。 これを避けるためには、No.2のように一時変数にsubstr(元の値をコピー)して、その一時変数に対して、文字列『<br>』を付加します。 サンプル No.1 use strict; use warnings; print '◆No.1 foreachのワーク変数$valueをそのまま使う', "\n"; my $Name = ""; my @Name = ('aaaa(10)', 'bbbb(11)'

    foreachのワーク変数には参照が入る!! - 小池啓仁 ヒロヒト応援ブログ By はてな
    kits
    kits 2008/09/07
    この例だと my @Name2 = map { s/\(/<br>\(/; $_ } @Name; とかして加工した配列を先に作ったほうがよいような。
  • Mathオブジェクトのmaxメソッドで、配列最大値を求める! - 小池啓仁 ヒロヒト応援ブログ By はてな

    ネットで検索すると大体、『Math.max()は、2つの数値を比較して大きいほうを返す』との説明になっています。 しかし、実際は、2つ以上のリストでも大丈夫です。 var biggest = Math.max(10, 11, 12, 9, 13, 8); alert(biggest); // 13が表示されるまた、他関数を自関数のようにしてしまうapply関数で、その第二引数には、他関数の引数を配列形式で渡します。 この2つの性質を利用すると、配列内の最大値を、apply関数で簡単に取得することが出来ます。 apply関数の第二引数へ、maxメソッドの引数すべてを配列形式で渡します。 var aaa = [10, 11, 12, 9, 13, 8]; var biggest = Math.max.apply(null, aaa); alert(biggest); // 13が表示されるちな

    Mathオブジェクトのmaxメソッドで、配列最大値を求める! - 小池啓仁 ヒロヒト応援ブログ By はてな
    kits
    kits 2008/06/16
    applyで複数の引数を配列で渡せる。
  • JSONとオブジェクトリテラルとの違い - 小池啓仁 ヒロヒト応援ブログ By はてな

    JSONは、JavaScriptのオブジェクトリテラルと似ていますが、以下が違います。 キーとして使うデータ型は、文字列に限る(キー項目をダブルクォート)。 コードは、Unicodeに限る(デフォルトUTF-8)。 {"kaisha":'日産',"run":'ブーン',"model":'セレナ'}今回テストしてみて確認しましたが、JSONはデータだけでなく、メソッドもOKですね。 (メソッドが実行されないようなチェックが必要かも・・・) 参考(JSON): http://okilab.jp/project/document/japanate/rfc/RFC4627J.txt http://d.hatena.ne.jp/brazil/20050915/1126709945 http://d.hatena.ne.jp/brazil/20050915/1126717649 http://tool

    JSONとオブジェクトリテラルとの違い - 小池啓仁 ヒロヒト応援ブログ By はてな
    kits
    kits 2008/05/21
    「jsにおけるリテラル」と「汎用的なデータ形式としてのJSON」とは微妙に仕様が異なる。 http://www.json.org/
  • openエラー取得について - 小池啓仁 ヒロヒト応援ブログ By はてな

    open は、ファイルが開けなかった場合に未定義値(偽)を返すので、それを否定(!)し、真にしてエラー取得を行います。 オーソドックス if(!open FH, ">ABC.txt") { die "open error $!"; }上記を下記のように記述することもできます。 「or」と「||」は、open 関数を評価してファイルを開く(真)ことができれば、die関数を評価せずに次の行に処理を移します。 「or」と「||」の違いは、評価の優先順位が「or」は「||」に比べて低いのです。 スマート open(FH, ">ABC.txt") or die "open error $!"; または open FH, ">ABC.txt" or die "open error $!"; または open(FH, ">ABC.txt") || die "open error $!";しかし、上記を下

    openエラー取得について - 小池啓仁 ヒロヒト応援ブログ By はてな
  • 配列を任意の一文字で初期化するには - 小池啓仁 ヒロヒト応援ブログ By はてな

    @Array=();にすると各要素にアクセスする時は、未定義になります。 では、任意の一文字で初期化するには、どうしたらよいでしょうか? たとえば、10個「"0"」で初期化するには、以下の感じ。 @Array = ("0", "0", "0", "0", "0", "0", "0", "0", "0", "0");スマートに書くと @Array = ("0") x 10;掛け算記号にエックスを使うなんてオチャメ。 以下は、出来そうだけどNGです。 @Array = map {$_ . "0"} @Array;未定義と文字列は連結できないようです。ていうか、これできたら大変なことになる(謎)。 要素数が0であるため{ }内が一度も実行されないからではないでしょうか。 私もそう思います。(ご指摘受けるまでは、気づきませんでした) kitsさん、いつもご指摘ありがとうございます。

    配列を任意の一文字で初期化するには - 小池啓仁 ヒロヒト応援ブログ By はてな
    kits
    kits 2008/04/06
    @a = map {"0"} (1..10); なら可
  • JavaScriptの関数へ「'」はエスケープしないと引数として渡せない? - 燈明日記

    以下のようにonclickからJavaScriptの関数をコールする場合は、「&#39;」はエスケープ(\&#39;)しないと引数として渡せない。 以下で、確認しました。ただしIE6のみ確認。 <html> <body> <form name="FM"> <input type="text" name="IP" value="ケース1:反応あり" onclick="subx('cb\&#39;b&quot;\\bc')"> <input type="text" name="IP" value="ケース2:反応なし" onclick="subx('cb&#39;b&quot;\\bc')"> <input type="text" name="IP" value="ケース3:反応なし" onclick="subx('cb'b&quot;\\bc')"> </form> <script> fun

    JavaScriptの関数へ「'」はエスケープしないと引数として渡せない? - 燈明日記
    kits
    kits 2008/04/06
    コメントで &#39; と書いたら ' が表示されていたので全角に置換。
  • シングルクォート使用時の留意点 - 小池啓仁 ヒロヒト応援ブログ By はてな

    WEBプログラム系でシングルクォートの用途は大体以下のとおりです。 Perlでは、文字列を囲む。 SQLでは、文字列を囲む。 HTMLでは、属性値を囲む。 で、囲んだ文字列の中にシングルクォートがあった場合どうするか、以下の通りです。 Perlの文字列では、「\'」のようにシングルクォートの前に「\」を置く。 SQLの文字列では、「''」のようにシングルクォートを重ねる。 HTMLの属性値では、「&#39;」のように数値文字参照にする。 しかし、JavaScriptでは、「&#39;」を渡した場合、文字を囲む「'」と解釈されエラーとなります。 したがって、この場合だけは、前に「\」を置き「\&#39」で渡すとJavaScriptは、文字中の「'」と解釈してくれるようです。 あと、EXCELのシート名などは、名前の頭に「'」が付けれなかったりしますね。 とにかく、シングルクォートは、プログラ

    シングルクォート使用時の留意点 - 小池啓仁 ヒロヒト応援ブログ By はてな
    kits
    kits 2008/04/01
    そんなことないと思うが…>「JavaScriptでは、『&#39;』を渡した場合、文字を囲む『'』と解釈されエラーとなります」