Skip to content

Instantly share code, notes, and snippets.

@takatoshiono
Last active August 29, 2015 13:55
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save takatoshiono/8700519 to your computer and use it in GitHub Desktop.
Save takatoshiono/8700519 to your computer and use it in GitHub Desktop.
[WIP] 1時間でわかるPerl

準備する

現在の環境を確認しょう

$ perl -v
$ perl -V
$ which perl

インストール

  • perlbrew

CPAN

cpanm

$ curl -L http://cpanmin.us | perl - App::cpanminus
$ cpanm --help

Perlを動かそう

ワンライナー

$ perl -e 'print "Hello, World.¥n"'

ファイル(スクリプト)

#!/usr/bin/env perl
use strict;
use warnings;

print "Hello, World.¥n";

REPL - Read-eval-print loop

$ cpanm Reply
$ reply
0> print "Hello, World.¥n"
Hello, World.
$res[0] = 1

安全のために

use strict;
use warnings;

変数の種類(型)

はじめに基本原則

変数名の先頭の記号について。

  • スカラー値は先頭に$
  • 配列は先頭に@
  • ハッシュは先頭に%

スカラー値(文字列、整数、浮動小数点数、リファレンス)

my $pepabo = 'paperboy';
my $year = 2014;
my $pi = 3.14;
print $pepabo, "¥n";
print $year, "¥n";
print $pi, "¥n";

リファレンスはあとで。

配列

my @numbers = (1, 2, 3, 4);
my @chars = split //, 'pepabo';
print $chars[0], "¥n"; # => 'p'
print $chars[-1], "¥n"; # => 'o'
  • 配列の要素を参照するときに$がつくことに注意しよう

ハッシュ

my %color_of = ('banana' => 'yellow', 'apple' => 'red');
print $color_of{'banana'}, "¥n"; # => 'yellow'

おまけ

  • =>,と同じ意味
my %color_of = ('banana', 'yellow', 'apple', 'red');
  • シングルクォーテーションは'省略可能
my %color_of = (
    banana => 'yellow',
    apple  => 'red',
);
print $color_of{banana}, "¥n";

真偽値

偽と判定される値。

  • undef
  • ''(空文字列)
  • 0(文字列の'0'も同じ)

それ以外は真となる。

正規表現

my $message = 'The quick brown fox jumps over the lazy dog';
if ($message =~ m/fox/) {
  print "matched.";
}
  • デリミタは/じゃなくてもOK
  • URLにマッチさせるときは/以外(!とか)を使うこともある
  • デリミタに/を使う場合、先頭のmは省略可能

置換

$message =~ s/dog/dogs/;
print $message, "¥n";

コンテキスト

  • Perlの理解において重要
  • コンテキストによって評価結果が変わる
  • 「スカラーコンテキスト」と「リストコンテキスト」

スカラーコンテキスト

ある操作が「スカラー値」を期待している。

$foo = 'foo';

配列をスカラーコンテキストで評価すると、その要素数が返る。

my @fruits = ('apple', 'banana', 'strawberry');
my $num = @fruits; # => 3
if (@fruits > 0) {
    # `if` provides scalar context.
    # This is equals to `if (3 > 0)`
}

スカラーコンテキストを明示する。

my @fruits = ('apple', 'banana', 'strawberry');
my $num = scalar(@fruits);

リストコンテキスト

ある操作が「配列」を期待している。

my @fruits = ('apple', 'banana', 'strawberry');
# print() provides list context
print @fruits, 'orange', "¥n"; # => applebananastrawberryorange
print join(' ', @fruits, 'orange'), "¥n"; # => apple banana strawberry orange
my @chars = split //, 'apple'; # => ('a', 'p', 'p', 'l', 'e')

真偽値(再び)

リファレンス

クラスとオブジェクト

つづく

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment