perl

htmlから <title> タグのデータを取得する

  • htmlファイル
...
<title>
aaa
</title>
...
  • コード
print if (/<title>/.. /<\/title>/);

ファイルから n行からm行までのデータを取得する

  • コード
print if (n .. m); # n, mには数字が入る

以下と同じ ( $. は ファイルから読み込み時の現在の行数)

print if ($. == n .. $. == m); # n, mには数字が入る

雑多

特殊変数

$_       # デフォルトの入力とパターン検索のスペース
$.       # ファイルから読み込み時の現在の行数
$/       # 入力時のレコード区切り文字。通常は改行。
$,       # 出力時の項目区切り文字。print @xx; の時に有効
$"       # 出力時の項目区切り文字。print "@xx"; の時に有効
$\       # 出力時の行末文字。print "$xx"; の後ろに付加される
$#       # 出力時の数値形式。通常は"%.20g"。詳細はprintfを参照
$%       # 出力時の現在のページ番号
$=       # 出力時の現在のライン数
$-       # 出力時の残り行数
$~       # 出力時のフォーマット名(デフォルトはハンドル名と同じ)
$^       # 出力時のヘッダフォーマット名
$|       # 0以外が代入されると出力をバッファリングしなくなる。
$$       # プロセスID
$?       # 最後に実行されたコマンドのステータス
$&       # パターンマッチにマッチした部分文字列
$`       # パターンマッチにマッチした部分の前側の文字列
$'       # パターンマッチにマッチした部分の後側の文字列
$+       # パターンマッチの最後の()に対応する文字列
$*
$0       # perlスクリプトのコマンド名
$1       # パターンマッチの際の1番目の()に対応する文字列
$[       # 配列の最初の添え字。通常は0。
$]       # perlのバージョン情報
$;       # 高次元連想配列の添え字の区切り文字
$!       # エラー番号、もしくはエラー文字列
$@       # 直前のevalコマンドのエラーメッセージ
$<       # このプロセスの実ユーザーID
$>       # このプロセスの実効ユーザーID
$(       # このプロセスの実グループID
$)       # このプロセスの実効グループID
$
$^D      # デバッグフラグの値
$^F      # システムファイルディスクリプタの最大値
$^I      # -iオプションで指定した拡張子の名前
$^L
$^P      # デバッガが使用する内部フラグ
$^T      # スクリプトを実行した時刻
$^W      # 警告スイッチの現在値
$^X      # perl自身の起動時の名前
@_       # サブルーチンへの引数
@INC     # perlライブラリ検索ディレクトリ
%INC     # 読み込まれたライブラリファイルの配列
__LINE__ # スクリプト中の現在の行数
__FILE__ # スクリプトのファイル名

代入演算子

a += b; # a = a + b;
a -= b; # a = a - b;
a *= b; # a = a * b;
a /= b; # a = a / b;
a %= b; # a = a % b;
a **= b; # a = a ** b;
a &= b; # a = a & b;
a ^= b; # a = a ^ b;
a |= b; # a = a | b;
a <<= b; # a = a << b;
a >>= b; # a = a >> b;
a &&= b; # 左辺がTrueの場合に右辺の値を左辺に代入
a ||= b; # 左辺がFalseの場合に右辺の値を左辺に代入
a .= b; # a = a . b;

範囲演算子

@list = (0 .. 5); # @list = (0, 1, 2, 3, 4, 5);
for (0 .. 5)      # for ($_ = 0; $_ <= 5; $_++)

フリップフロップ演算子

if (n .. m); # n行目からm行目までの行全てがtrueになる
if ($. == n .. $. == m); # ↑と同じで行番号変数($.)を省略しない書き方
if (/$str1/ .. /$str2/) # $str1から$str2までの行全てがtrueになる

正規表現

if($var =~ /$regex/) # マッチ
if($var !~ /$regex/) # マッチしない
if($var =~ /($regex)/) # マッチする文字列をグループ化

補足したグループの後方参照

$1, $2, $3, ... #(  )の部分にマッチした文字列
$+              #最後にマッチした(  )部分
$&              #マッチした文字列全体(非推奨)
$`              #マッチした文字列に先行する部分(非推奨)
$'              #マッチした文字列に後続する部分(非推奨)

以下を推奨

if($var =~ /($regex)/p) # p修飾子を付ける
# 以下の変数を利用
${^MATCH}      #マッチした文字列全体
${^PREMATCH}   #マッチした文字列に先行する部分
${^POSTMATCH}  #マッチした文字列に後続する部分

後方参照させないグループ化

if($var =~ /(?:$regex)/) # この後に$1,$2,...で参照ができない

クォート演算子

q(aa)        # 'aa'
qq(aa)       # "aa"
qw(a b c )   # ('a', 'b', 'c')
qx(commnad)  # `command`
qr(regrex)i  # compiled /regrex/i
m(regrex)    # /regrex/
s(a)(b)      # s/a/b/

# 区切り文字は()でなくても良い
q{aa}        # q(aa)
# 以下の括弧はネスト可能
# (), <>, [], {}
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.