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

リファレンス

Class

正規表現


2015-05-11 22:26 tags:perl