memo
Perl めも
書き方いろいろ
比較演算子と論理演算子
比較 数値 文字列 戻り値
等しい == eq 左引数と右引数が等しければ真を返す。
等しくない != ne 左引数と右引数が等しくなければ真を返す。
小さい < lt 左引数が右引数より小さければ真を返す。
大きい > gt 左引数が右引数より大きければ真を返す。
以下 <= le 左引数が右引数と同じか小さければ真を返す。
以上 >= ge 左引数が右引数と同じか大きければ真を返す。
比較 <=> cmp 等しければ0、大きければ1、右引数が大きければ-1を返す。
論理積 $a && $b $a と $b が真ならTRUEを返す
論理和 $a || $b $a もしくは $b が真ならTRUEを返す
否定 ! $a $aが真でなければTRUEを返す
論理積
&& と and は、左側の演算子が真であれば、右側の演算子も評価します。左側の演算子が偽であれば、右側の演算子を評価せずに結果を返します。
論理和
|| と or は、左側の演算子が真であれば、右側の演算子を評価せずに結果を返します。左側の演算子が偽りであれば、右側の演算子も評価します。
論理積 $a and $b $a と $b が真ならTRUEを返す
論理和 $a or $b $a もしくは $b が真ならTRUEを返す
否定 not $a $aが真でなければTRUEを返す
ファイルオープン エラー
open( FH, "file.txt") || die "Cannot open file: $!\n";
.= 右辺値を左辺値の文末に追加
$x = "filename";
print $x .= ".txt";
> filename.txt
条件演算子
?: は、『条件演算子』です。? の前の引数が TRUE であれば、: の前の引数が返されますが、FALSE であれば、: の後の引数が返されます。
$x = $a > $b ? $a : 0;
上記の例は、$a が $b より大きい値であれば $a の値を返し、それ以外は 0 を返します。
マッチするしない
if ($basename =~ /^thumbnail_/){}
if ($basename !~ /^thumbnail_/){}
置換
$str=~ s/dsktnk/tnk/g; #dsk
配列
my @array = ('a', 'b', 'c');
print $array[0]; # a
print $array[1]; # b
要素数取得
my $hoge = @array;
ハッシュ
my %hash = (
perl => 'larry',
ruby => 'matz',
);
print $hash{perl}; # larry
print $hash{ruby}; # matz
for my $key (keys %hash) { # 全要素
my $value = $hash{$key};
}
Class
use Text::Markdown::Discount;
my $m = Text::Markdown::Discount->new;
my $html = $m->markdown($line);
use Text::Markdown::Discount qw/markdown/;
my $m = Text::Markdown::Discount->new;
my $html = markdown($line);
package Book;
sub new {
my $class = shift;
my $self = {};
return bless $self, $class;
}
my $book = Book->new;
sub new{
my $class = shift;
my ( $title, $url, $filetype, $charset ) = @_ ;
my $self = {"title" => $title ,
"url" => $url ,
"filetype" => $filetype ,
"charset" => $charset };
bless $self, $class;
return $self;
}
#データ取得部分
sub getdata{
my $self = shift;
my $ua = LWP::UserAgent->new;
$ua->agent('Mozilla/4.0 (compatible; MSIE 6.01; Windows NT 5.0)');
my $request = HTTP::Request->new('GET' , $self->{url});
$request->header('Referer', $self->{url});
my $response = $ua->request($request);
my $data = $response->content;
return $data;
}
my $blogmap = new Antenna "blogmap", "http://1470.net/bm/urlranking.html?mode=rss", "rss", "euc-jp";
my $newslinks = new Antenna "NEWSLinks", "http://newsl.hp.infoseek.co.jp/", "html", "euc-jp";
my $hatena = new Antenna "hatena_hoturl", "http://d.hatena.ne.jp/hoturl?mode=rss", "rss", "utf-8";
my $hatena_okazu = new Antenna "hatena_okazu", "http://ron.s35.xrea.com/hatena/okazu15.xml", "rss", "utf-8";
my $minagine = new Antenna "minagine", "http://minagi.akari-house.net/all.html", "html", "sjis";
my $tariki = new Antenna "tariki","http://dotzap.ddo.jp/blogbot.html","html","utf-8";
my $cocolog = new Antenna "cocolog", "http://www.cocolog-nifty.com/updates.rdf", "rss", "utf-8";
#サイトを追加したらここも
my @crawl = ($blogmap,$newslinks,$hatena,$hatena_okazu,$minagine);
sub new {
my $proto = shift;
# インスタンスメソッドなら $proto には参照が渡される。
# クラスメソッドなら $proto には名前が渡される。
my $class = ref($proto) || $proto;
$self = {}; # 一般にハッシュを使う。
$self->{NAME} = undef;
# $self を $class パッケージ名で bless する。
# パッケージ名を付けるのは継承のため。
bless($self, $class);
return $self;
}
&sub(10, 20);#このように呼び出す。
sub sub1{
my $foo = $_[0]; #第1引数を受け取る
my $foo = $_[1]; #第2引数を受け取る
}
sub sub2{
my ($boo, $foo) = @_;#第1、第2引数の受け取り
}
sub sub3{
my $foo = shift; #第1引数の受け取り
my $foo = shift; #第2引数の受け取り
}
Perl
モダン Perl
- perlの関数を第一級オブジェクトとして扱う話
- 山口家の逆襲->perl-解説->クロージャ
- Perlのクロージャ
- Perl におけるオブジェクト指向
- クロージャの概念をクラスとの対比でわかりやすく説明する
- インターン講義初日「Perlによるオブジェクト指向プログラミング」
リファレンス
Class
- Class をつくる
- perltoot - トムによる Perl オブジェクト指向チュートリアル
- perlのクラスメソッドとオブジェクトメソッドの違い
- Perlにおけるクラスメソッドとインスタンスメソッドの違い
正規表現
2015-05-11 22:26 tags:perl