小池啓仁 ヒロヒト応援ブログ By はてな

小池啓仁(コイケヒロヒト)の動画など。

小池啓仁 ヒロヒト応援ブログ By はてな

Perlノート

Win上で漢字変換し、それをLinuxに持っていく

◆ プロローグ えーと、まずはじめに、Perlで漢字処理をするには、ソースコードを utf8 で書くのが基本です。 しかし、Windowsだと、なかなかそうできないケースがあったりします・・・。 以下は、ソースコードを shiftjis で書いています。 ◆ 本題 Linuxでの漢…

WIN系でフォルダをコピーするには

Perlでは、system関数やバッククォートで外部コマンドが実行できます。 linux系ではcpコマンドの-rオプションで、インタラクティブなしにディレクトリ(フォルダ)のコピーができます。 しかし、WIN系では、copyコマンドはファイルのコピーで、xcopyコマンド…

Perlの謎(その10)サブルーチンの呼び出し方

予告したサブルーチンの呼び出し方の謎です。 しかし、予告した割りには、上手くまとまらなかったのですが・・・以下のようになりました。 ◆ イントロ まず、Perlでのサブルーチンは関数と等価です。 そして、関数の呼び出し方には、『&』のファニー文字を付け…

配列とハッシュの要素数の求め方

Perlの場合、複雑なデータ構造は、配列とハッシュの組み合わせです。 通常、配列やハッシュを処理する時は、ループになりますね。 その時に、ループの最大値を指定しないとなりません。 ループの最大値は、普通、配列やハッシュの要素数-1になります。 実は…

配列のインデックスでなく、インデックスの配列?

以下は、弾さんのブログで、たまたま見つけました。 なんか、配列をインデックスに使用していますね。 普通は、配列に対してインデックスがあるのに、以下は配列がインデックスになっています。 つまり、配列のインデックスでなく、インデックスの配列? ◆ …

ハッシュの要素数を求めるには?

配列の要素数は、配列変数をスカラーコンテキストで評価すると求められます。 では、ハッシュの要素数は、どのように求めればよいでしょうか・・・。 こたえ、keys関数(または、values関数)のリターン値をスカラーコンテキストで評価して求めます。 ◆サンプル…

ハッシュが空かどうかを調べたい

ハッシュが空かどうかを調べたいときは、以下のサンプルを参考にしてください。 決して、defined()の否定を使わないように、defined()は、スカラーで未定義の判定に使います。 ◆サンプル %hash =(); #%hash = (aaa => 111, bbb => 222, ccc => 333); if (!%h…

正規表現ブログ完成

ここのところ、ちょこちょこ直していた正規表現ブログが完成しました。 Perlの謎(その8):正規表現http://d.hatena.ne.jp/chaichanPaPa/20090704/1246704646 正規表現初心者の人にも分かりやすく解説したつもりです。 あと、昨日の『Perlの謎(その9):…

Perlの謎(その9):Perlでの文字列

VB系とかDOSコマンド系での文字列はダブルクォーテーションです。 また、SQL系での文字列は、シングルクォーテーションです。 Perlでの文字列は、上記両方です。 違いは、ダブルクォーテーションでは変数が展開され、シングルクォーテーションでは展開されま…

Perlの謎(番外編4):『ハッシュの配列』か『配列のハッシュ』か?

まず、以下のソースを見てください。 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の謎(その8):正規表現』へ以下を追記しました。 説明していないマッチ変数($& $` $') \Aと\Zアンカー(常に文字列の先頭と末尾にのみマッチ) 確認リンク:http://d.hatena.ne.jp/chaichanPaPa/20090704 以下は残件です。 最大マッチと最小…

追記予定

昨日の『Perlの謎(その8):正規表現』への追記予定です。 最大マッチと最小マッチについて 説明していない修飾子(s m o) 説明していないマッチ変数($& $` $') \Aと\Zアンカー(常に文字列の先頭と末尾にのみマッチ) 他にも何かありますか?

Perlの謎(その8):正規表現

今回の謎は、正規表現です。 はじめての人のために解説をしてみました。 他言語からの人は、正規表現を使う機会がなかったかもしれませんが・・・。 Perlでは、正規表現を使うための言語と言っても過言ではありません。 正規表現を使うことによりテキスト(文字…

Perlの謎(その7):マッチ演算子の区切り文字

マッチ演算子はスカラー変数に格納されている文字列を正規表現を使ってマッチするか判断する演算子です。 通常、区切り文字『/』を使って以下のようになります。 if ($_ =~ m/abc/) { print "マッチした! \n"; } else { print "マッチしない!\n"; } しかし…

Perlの謎(その6):foreach文がfor文に

結論から言うと、Perlでは、for文とforeach文は同じ物なのです。 というか、for文のforは、foreachの省略形とのことです(ホントかな)。 と同じとはいいながら、for文とforeach文ではイメージが違います。 for文は、インデックスで回すイメージ foreach文は…

Perlの謎(その5):構造体がないデータ構造

普通の言語、たとえば、C言語とかVB等では、データ構造を定義できる構造体があります。 もっと昔だと、構造体がなく、すべて配列で処理する言語もありました(昔のコボルとかベーシック)。 で、perlのデータ構造なのですが、ご存知の通り、スカラー、配…

Perlの謎(その4):コンテキストで意味が変わる関数

今回は、他言語経験者にとって、Perlでの最大の謎『コンテキスト』です。 まず、Perlでは、スカラー変数と配列変数とハッシュ変数があります。 スカラー変数には、文字列や数値、リファレンス等のスカラー値を代入します。 配列変数やハッシュ変数には、リス…

Perlの謎(その3):subのデフォルトのリターン値

Perlでのサブルーチンは、実は関数とイコールです。 そもそも、サブルーチンと関数の違いは、リターン値を返すか返さないかの違いです。 しかし、Perlでは、サブルーチンでもリターン値を返すことができるので、事実上、関数とイコールなのです。 Perlのサブ…

Perl謎シリーズ

えーと、これからのアップ予定です。 そのx系は、(その2)までで、つぎは(その3)の予定です。 番外編系は、随時です。 ◆そのx系 Perlの謎(その1):変数等の頭文字って何を意味するの? Perlの謎(その2):『特殊変数 $_』とは Perlの謎(その3…

Perlの謎(番外編3):『コンスタントと変換演算子のoverload』とは

先日紹介した、結城先生のPerlクイズの以下の回答が、さっぱり分からなかったので調べてみました。 use overload '""' => sub{${+shift}*$_*2}, '0+'=>sub{${+shift}}; BEGIN { overload::constant (integer => sub{my $a=shift; bless \$a, 'main'}) } http…

Perlの謎(その2):『特殊変数 $_』とは

まず、以下のソースを見てください。 use strict; use warnings; while (<DATA>) { if (/^h.*e$/) { print; # hogeを表示する } } __END__ hoge foo Perl初心者や他言語から来た人が・・・実はかつての自分が、このソースを見た時に???のオンパレードでした。 これ</data>…

Perlの謎(番外編2):__END__と__DATA__の違い

今回も当初予定していなかったので、番外編としました。__END__と__DATA__は、ほぼ同じ機能で、以下のように__END__や__DATA__以降の行をあたかもテキストファイルのようにハンドルDATAによって読み込むことができます。 use strict; use warnings; while (<DATA>)</data>…

Perlの謎(番外編1):リストの要素数を求める

『Perlの謎』シリーズは、他言語経験者やPerl初心者が対象なので難易度が低いです。 今回は、ちょっと難度が高いので番外編としました。 では、参ります。 配列変数に格納されている要素数は、通常、以下のようにスカラー変数に配列変数を代入すると求められ…

Perlの謎(その1):変数等の頭文字って何を意味するの?

他言語、特にオーソドックスなcobol,c,java,vb等の人がPerlをやり始めると謎だらけで悩むことになりますね。 そんな人のために、僭越ながら私が謎を解き明かしていきますよ! Perlerの方は温かく見守ってくださいね(^o^) ◆変数等の頭文字って何を意味す…

YAML(ヤムル)とは

id:fbisさんのところでYAML(ヤムル)を知りました。 YAMLは、JSONとよく似ている。 実際、仕様がかぶるケースがあり、JSONをYAMLとして処理できる場合もあるらしい。 Perlとしては、無名配列と無名ハッシュに上手く対応している。 言葉で説明すると大変なの…

『Perlらしく書くための5つの極意』が良かった件について

id:bingo_nakanishi_perlさんの『Perlらしく書くための5つの極意』を読んで、思わず、はてブしてしまいました! 忘れないためにメモしときます。 極意1 組み込み関数のカッコは書かない 極意2 変数は必要になったら宣言 極意3 つなげる 極意4 数字と文字を自…

Benchmark モジュールの使い方

いつも陰ながらお世話になっているid:fbisさんところで、各種コンスタントのBenchmarkテストがありました。 http://d.hatena.ne.jp/fbis/20090612/1244806476 Benchmarkは使ったことがないと思ったのですが、ググルとなんと9年前の2000年の掲示板に自分…

黒魔術を読み解く

久々に弾さんのブログを見て、以下のソースが理解できなかったので、調べてみました。 折角なので、調べたことをメモしときます。 #!/usr/bin/perl use strict; use warnings; { no warnings 'redefine'; *CORE::GLOBAL::glob = sub{ my $expr = shift; warn…

Perlでの単独shiftとは何か?

Perlでのshift関数は、普通、配列変数を引数にとり、配列変数から一番若いインデクスの要素を取り出します。 しかし、配列変数の引数がない単独shiftを結構見かけます。 これは、mainモジュールでは「@ARGV」がデフォルトの引数で、sub内では、「@_」がデフ…

日付け処理する時の留意点

一見簡単そうに見える日付け処理にも、実は結構やっかいな処理が隠れています。 以下は、日付け処理をする時の留意点 うるう年と月の末日の処理http://d.hatena.ne.jp/chaichanPaPa/20080115/1200404624 SQLのWHEREの条件で、日付けは文字列型でないので、い…