0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

勉強ネタ(perlのただのメモ)

Last updated at Posted at 2018-04-11

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)
# 以下の括弧はネスト可能
# (), <>, [], {}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?