<?xml version="1.0" encoding="UTF-8" ?><rdf:RDF 
  xmlns="http://purl.org/rss/1.0/"
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:atom="http://www.w3.org/2005/Atom"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xml:lang="ja">
  <channel rdf:about="http://w.atwiki.jp/kuwa0224kuwa/">
    <title>kuwa0224kuwa @ ウィキ</title>
    <link>http://w.atwiki.jp/kuwa0224kuwa/</link>
    <atom:link href="https://w.atwiki.jp/kuwa0224kuwa/rss10.xml" rel="self" type="application/rss+xml" />
    <atom:link rel="hub" href="https://pubsubhubbub.appspot.com" />
    <description>kuwa0224kuwa @ ウィキ</description>

    <dc:language>ja</dc:language>
    <dc:date>2012-01-24T14:58:40+09:00</dc:date>
    <utime>1327384720</utime>

    <items>
      <rdf:Seq>
                <rdf:li rdf:resource="https://w.atwiki.jp/kuwa0224kuwa/pages/37.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/kuwa0224kuwa/pages/36.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/kuwa0224kuwa/pages/35.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/kuwa0224kuwa/pages/34.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/kuwa0224kuwa/pages/33.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/kuwa0224kuwa/pages/32.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/kuwa0224kuwa/pages/31.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/kuwa0224kuwa/pages/30.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/kuwa0224kuwa/pages/29.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/kuwa0224kuwa/pages/28.html" />
              </rdf:Seq>
    </items>
	
		
    
  </channel>
    <item rdf:about="https://w.atwiki.jp/kuwa0224kuwa/pages/37.html">
    <title>perl/memo</title>
    <link>https://w.atwiki.jp/kuwa0224kuwa/pages/37.html</link>
    <description>
      *Memo

**ダブルクォートの中で関数呼び出し
この2行は同じ意味。
でも上のほうがパフォーマンスいいらしい。
 31 print $en-&gt;getAfter(),&quot;\n&quot;;
 32 print &quot;@{[$en-&gt;getAfter()]}\n&quot;;    </description>
    <dc:date>2012-01-24T14:58:40+09:00</dc:date>
    <utime>1327384720</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/kuwa0224kuwa/pages/36.html">
    <title>perl/pkg</title>
    <link>https://w.atwiki.jp/kuwa0224kuwa/pages/36.html</link>
    <description>
      * パッケージとモジュール
パッケージとモジュールの扱い方について。

** パッケージ
パッケージは、Javaでいうクラスに近いかも。
オブジェクトという意味で近いのではなく、変数のスコープとして近い。
1つの変数利用可能なスコープと考えていいかも。
今までは main パッケージを暗黙的に使っていた。

パッケージの定義の仕方
 package hoge;
次のパッケージが出てくるまでは、hogeパッケージの範囲となる。

パッケージの使い方
 require &quot;pkg1.pl&quot;;
これでpkg1.pl をまず読み込む。
 &amp;pkg1::fun(); # pkg1のfun()を呼び出し。
 $pkg1::name;  # pkg1の$nameを呼び出し。 
パッケージ名を付けないと、mainパッケージから呼ぶことになる。

** モジュール
モジュールは、Javaで言うところのライブラリ。

モジュールの利用のしかた。
 use Hoge;
モジュール名は基本大文字スタート。
use は読み込み時にコンパイルが行われる。
require は実行時にコンパイルが行われる。
 use Hoge qw/fun1 fun2/;
とすると、Hogeの中のfun1 と fun2 しか読み込まれない。

モジュールの作り方。
拡張子は.pm。

 package Hoge;
 
 use Exporter;
 @ISA = (Exporter);
 @EXPORT = qw(fun1);
 
 sub fun1 {
  # 処理
 }
ファイル名はこのパッケージ名にあわせよう。
@EXPORT のところを、@EXPORT_OK にしたら、明示的にuse しない限りつかえない。
@EXPORT_FAIL にしたら、読み込めない。

環境によって、切り替えるなどで使う。    </description>
    <dc:date>2011-07-31T18:41:30+09:00</dc:date>
    <utime>1312105290</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/kuwa0224kuwa/pages/35.html">
    <title>perl/sub</title>
    <link>https://w.atwiki.jp/kuwa0224kuwa/pages/35.html</link>
    <description>
      * サブルーチンについて

** 呼び出し方
 do hoge;
 &amp;hoge;
 hoge();

前方宣言も可能。
 sub hoge;
これをやっとくと、何もつけないでサブルーチンを呼ぶことも可能。
 hoge;

存在しないサブルーチンが呼び出されると、エラー出る。
定義されているかチェックするときは、 &amp;italic(){defined} が使える。

返り値は、最後に評価した値か、returnで指定した値となる。

** 引数
@_ の中に引数で指定した値の配列が入っている。
中身を見るときは、$_[0], $_[1] みたいな感じ。

@_の変更についてだが、配列自体の変更については呼び出し元に影響はない。
ただ、配列の値を変更すると呼び出し元にも影響が出る。
影響が出ないようにするには、サブルーチンが変数を渡されたら、local変数にいれる。
 &amp;hoge(&quot;foo&quot;, &quot;bar&quot;);
 sub hoge{
   local ($foo, $bar) = @_;
 }
local のスコープは、そのサブルーチンから呼ばれたサブルーチンでも適用となるので注意。
本当にもうそこだけにしたいときは、my を使う。

逆に配列自体に影響を与えたい場合は、エイリアス指定で投げる。

**AUTOLOAD
これを使えば、定義していないサブルーチンを使ったときにこれが呼ばれる。
このサブルーチン内で使う、$AUTOLOADにはパッケージ名::呼び出したサブルーチン名が含まれている。

**BEGINとEND
BEGINはそのサブルーチン内で一番最初に評価される処理。
ENDはそのサブルーチン内で一番最後に評価される処理。
ENDはdie後でも評価される。

**subs
サブルーチンの前方宣言がらくちんに。
 use subs (&#039;fun1&#039;, &#039;fun2&#039;);    </description>
    <dc:date>2011-07-31T17:58:32+09:00</dc:date>
    <utime>1312102712</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/kuwa0224kuwa/pages/34.html">
    <title>perl/testfile</title>
    <link>https://w.atwiki.jp/kuwa0224kuwa/pages/34.html</link>
    <description>
      * ファイルに対するテスト
shellと若干かぶってるやも。
|-r $file| 読み込み可能なファイルならtrue|
|-w $file| 書き込み可能なファイルならtrue|
|-x $file| 実行可能なファイルならtrue|
|-o $file| ownerが自分のファイルならtrue|
|-e $file| 存在するファイルならtrue|
|-z $file| 空ファイルならtrue|
|-s $file| 空ではないファイルならtrue。サイズを返す|
|-f $file| 普通のファイルならtrue|
|-d $file| ディレクトリファイルならtrue|
|-l $file| シムリンクならtrue|
|-T $file| テキストファイルならtrue|
|-B $file| バイナリファイルならtrue|    </description>
    <dc:date>2011-07-25T23:50:07+09:00</dc:date>
    <utime>1311605407</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/kuwa0224kuwa/pages/33.html">
    <title>perl/arg</title>
    <link>https://w.atwiki.jp/kuwa0224kuwa/pages/33.html</link>
    <description>
      *実行時の引数
**ARGV
実行時の引数は、@ARGV配列に入る。
$ARGV[0]には、普通に最初の引数が入る。スクリプト名は入らない。
$0の中にスクリプト名が入ってる。
 ./sapmle,pl a b c
 ####
 print $ARGV[0]; # print a
 print $0; # print sample.pl

$#ARGV は配列の大きさかと思いきや、一番最後のインデックスが入る。
つまり配列の大きさは $#ARGV + 1 で表す。
 ./sapmle,pl a b c
 ####
 print $#ARGV + 1; # print 3

&lt;ARGV&gt;とすると、各引数をファイルとして扱う。&lt;&gt;も同じ意味になる。
$ARGVには今扱っているファイルの名前が入る。
 ./sapmle,pl a.txt b.txt c.txt
 ####
 while(&lt;&gt;) {
   print;  # print lines of files
   print $ARGV; # print current using filename
 }    </description>
    <dc:date>2011-07-25T23:22:27+09:00</dc:date>
    <utime>1311603747</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/kuwa0224kuwa/pages/32.html">
    <title>perl/fileh</title>
    <link>https://w.atwiki.jp/kuwa0224kuwa/pages/32.html</link>
    <description>
      *ファイルハンドラの扱い
**オープン
ファイルのオープンにはopenを使う。
 open(HANDLE,filename)
 open(HANDLE)
 open HANDLE
基本の型は一番上。ファイル名を指定しつつ、そのハンドラをHANDLEで指定する。
filenameを指定しなかった場合、HANDLEのスカラー値がファイル名として使われる。

ファイルを開くときに失敗する可能性があるので、例外対応するのがふつう。
 open(HANDLE, &quot;./file.txt&quot;) || die &quot;Can&#039;t open: $!\n&quot;;
$!にはエラーMsgが入る。
open の後には;はいらないみたい。

出力内容ファイルに書き込む時のオープンはこんな感じ。
 open(HANDLE, &quot;&gt; $file&quot;) ||  die &quot;Can&#039;t open: $!\n&quot;;
 print HANDLE &quot;test\n&quot;;
このtestは$file のファイルに出力される。printのところにHANDLE設定してるからね。
これ設定しないと、デフォルト(STDOUT)のまま。
open 時に &gt; を入れてるところがポイント。closeすれば、この状態から解き放たれる。
追記したい場合は、&gt;&gt; にする。
|も使える。これをするとつまり、ハンドラに与えられたものを echo して、パイプ後の処理をするイメージ。
 open(HANDLE, &quot;| wc -l&quot;) ||  die &quot;Can&#039;t open: $!\n&quot;;
 print HANDLE &quot;one\ntwo\nthree\n&quot;;
これをすると3とでるよ。printの2引数が3行だからね。

コマンド| という形だったら、コマンドの実行結果がハンドラに渡される。
コマンド| の形は、コマンドの結果を1行1行処理したいときによく使うぽいぞ。
 open (PROC, ps -aux | ) || die &quot;Error: $!\n&quot;;
 while ($line = &lt;PROC&gt;) {
   print &quot;$line&quot; if $line =~ /^tomcat/;
 }

***select
selectで明示的にデフォルトファイルハンドラが指定できる。
またこの処理の    </description>
    <dc:date>2011-07-25T23:42:57+09:00</dc:date>
    <utime>1311604977</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/kuwa0224kuwa/pages/31.html">
    <title>perl/regex</title>
    <link>https://w.atwiki.jp/kuwa0224kuwa/pages/31.html</link>
    <description>
      *正規表現
**m演算子
ｍからはじまるマッチング。検索パターンの指定に使う。
 m/regex/[修飾子]
mの修飾子の種類
|i|大文字と小文字を区別しない|
|m|文字列を複数行として扱う。(^と$が改行ごとにマッチする)|
|o|パターンのコンパイルを一度しか行わない|
|s|文字列を単一行として扱う。(^と$が最初と最後にしかマッチしない)|
|x|拡張正規表現をつかう。(空白を無視するようになる。エスケープと[ ]以外)|
|g|すべてのマッチを行う。配列でとればマッチしたものがとれ、スカラでとれば、true or falseがとれる|
mの後をスラッシュ/以外にすれば、それがデリミタとなります。
逆にデリミタを変えないのであれば、mはいらない。

**s演算子
sからはじまるマッチング。置換処理に使う。
これもデリミタの変更OK。
 s/regex/replaceto/[修飾子]
sの修飾子の種類
|e|replacetoの式を評価する(足し算とか)|
|i|大文字と小文字を区別しない|
|m|文字列を複数行として扱う。(^と$が改行ごとにマッチする)|
|o|パターンのコンパイルを一度しか行わない|
|s|文字列を単一行として扱う。(^と$が最初と最後にしかマッチしない)|
|x|拡張正規表現をつかう。(空白を無視するようになる。エスケープと[ ]以外)|
|g|マッチしたものをすべて置換する|

s演算子を使って、こんなこともOK。
 perl -ne &#039;print if s/ABC/DEF/;&#039; names.txt
ABCにマッチするかどうかのif文にしておいて、printさせるのはDEFに置換後という技。

**パターン照合演算子
|$hoge =~ /abc/|$hogeがabcを含むかどうかの条件式|
|$hoge !~ /abc/|$hogeがabcを含まないかどうかの条件式|
|$hoge =~ s/abc/def/|$hogeのabcをdefに置換|

暗黙的にこれらは使っていた。
/abc/ が $_ ~= /abc/ と同じ意味だった。

**tr, y
trとyは同じ。
置換文字列の文字を１つずつ置換する。
返り値は置換した文字数。
-dオプシ    </description>
    <dc:date>2011-07-18T22:40:06+09:00</dc:date>
    <utime>1310996406</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/kuwa0224kuwa/pages/30.html">
    <title>perl/string</title>
    <link>https://w.atwiki.jp/kuwa0224kuwa/pages/30.html</link>
    <description>
      *文字列に対する演算子や関数
**結合演算子
文字列を結合させる。
 $str1 . $str2;
**繰り返し結合
文字列を繰り返して結合させる。
 $str1 x $num;
**substr
文字列からの文字列の抽出
 $ext = substr($str, $offset, $len);
** index
文字列のなかで文字列が見つかった位置を返す。見つからなかったら-1。
 $i = index($str1, $str2);
**length
文字列の長さをかえす。
 $l = length($str);
**rindex
文字列の中で文字列が見つかった最後の位置を返す。見つからなかったら、-1。
POSiTIONが指定されたら、その位置より前から探す。
 $i = rindex($str1, $str2, $position);
**chr
文字コードから文字列を生成する。
 $c = chr($num);
*lc
小文字の文字列を返す。
 $str2 = lc($str1);
*uc
大文字の文字列を返す。
 $str2 = uc($str1);    </description>
    <dc:date>2011-07-18T18:43:58+09:00</dc:date>
    <utime>1310982238</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/kuwa0224kuwa/pages/29.html">
    <title>perl/operand</title>
    <link>https://w.atwiki.jp/kuwa0224kuwa/pages/29.html</link>
    <description>
      *演算子について
**等価演算子
数字の場合
|==|等しい場合に1,違えば0|
|!=|等しくない場合に1、違えば0|
|&lt;=&gt;|代償を比較して、左辺が小さければ-1、等しければ0、大きければ1|
文字の場合（文字コードを比較する）
|eq|等しい場合に1,違えば0|
|ne|等しくない場合に1、違えば0|
|cmp|代償を比較して、左辺が小さければ-1、等しければ0、大きければ1|    </description>
    <dc:date>2011-07-18T18:31:11+09:00</dc:date>
    <utime>1310981471</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/kuwa0224kuwa/pages/28.html">
    <title>perl/spvariable</title>
    <link>https://w.atwiki.jp/kuwa0224kuwa/pages/28.html</link>
    <description>
      * Perl内で扱われる特別な変数

|$.|ファイルから読み込み時の現在の行数|
|$/|入力時のレコード区切り文字。通常は改行。|
|$,|出力時の項目区切り文字。print@xx;の時に有効|
|$&quot;|出力時の項目区切り文字。print&quot;@xx&quot;;の時に有効|
|$\|出力時の行末文字。print&quot;$xx&quot;;の後ろに付加される|
|$#|出力時の数値形式。通常は&quot;%.20g&quot;。詳細はprintfを参照|
|$%|出力時の現在のページ番号|
|$=|出力時の現在のライン数|
|$-|出力時の残り行数|
|$~|出力時のフォーマット名(デフォルトはハンドル名と同じ)|
|$^|出力時のヘッダフォーマット名|
|$$|プロセスID|
|$?|最後に実行されたコマンドのステータス|
|$&amp;|パターンマッチにマッチした部分文字列|
|$`|パターンマッチにマッチした部分の前側の文字列|
|$&#039;|パターンマッチにマッチした部分の後側の文字列|
|$+|パターンマッチの最後の()に対応する文字列|
|$0|perlスクリプトのコマンド名|
|$1|パターンマッチの際の1番目の()に対応する文字列|
|$[|配列の最初の添え字。通常は0。|
|$]|perlのバージョン情報|
|$;|高次元連想配列の添え字の区切り文字|
|$!|エラー番号、もしくはエラー文字列|
|$@|直前のevalコマンドのエラーメッセージ|
|$&lt;|このプロセスの実ユーザーID|
|$&gt;|このプロセスの実効ユーザーID|
|$(|このプロセスの実グループID|
|$)|このプロセスの実効グループID|
|$||
|$^D|デバッグフラグの値|
|$^F|システムファイルディスクリプタの最大値|
|$^I|-iオプションで指定した拡張子の名前|
|$^L||
|$^P|デバッガが使用する内部フラグ|
|$^T|スクリプトを実行した時刻|
|$^W|警告スイッチの現在値|
|$^X|perl自身の起動時の名前|
|@_|サブルーチンへの引数|
|@INC|perlライブラリ検索ディレクトリ|
|%INC|読み込まれたライブラリファイルの配列|
|__LINE__|スクリプト中の現在の行数|
|__FILE__|スクリプト    </description>
    <dc:date>2011-07-17T22:08:01+09:00</dc:date>
    <utime>1310908081</utime>
  </item>
  </rdf:RDF>
