Perl500503Syntax-OrDie

 view release on metacpan or  search on metacpan

doc/Perl500503Syntax-OrDie_cheatsheet.JA.txt  view on Meta::CPAN

    "%v" が含まれていても違反にはなりません。それらは実行時の値であり、
    構文要素ではないためです。

    open() と mkdir() に対する CORE::GLOBAL:: オーバーライドによる
    ランタイムガードも設置されます。

    コマンドとして実行した場合は、コマンドラインで指定した各ファイルを
    チェックして結果を表示します。"-" を指定すると標準入力から読み込みます。
    引数なしで実行した場合は使用方法を表示します。

    ソースフィルタ機構は使用しません。Perl 5.005_03 から現在のリリースまで
    動作します。

プログラマティックAPI
    check_source($source, $label)
        $source(文字列)をスキャンし、違反メッセージのリストを返します。
        違反がなければ空リストを返します。自動的に die しません。
        呼び出し側でリストを処理します。

            my @v = Perl500503Syntax::OrDie::check_source($src, 'foo.pl');
            if (@v) { warn $_ for @v }

    check_file($path)
        $path を読み込んで check_source を呼び出します。
        違反があれば die します。

チェック対象構文(静的チェック、コンパイル時)
    Perl 5.6
      our $var / our @arr / our %hash      ("use vars" を使用すること)
      open(FH, MODE, PATH)                 3引数形式
      use utf8
      use VERSION  (VERSION >= 5.6)
      use vVERSION (VERSION >= v5.6)
      \x{HHHH}                             Unicode16進エスケープ
      \N{name}                             名前付き文字エスケープ
      @+ / @-  および  $+[N] / $-[N]      マッチ位置配列
      CHECK { } / INIT { }                 フェーズブロック
      v1.2.3                               vストリング記法
      $^V                                  バージョンオブジェクト($]を使用)
      sub foo :lvalue { }                  :lvalue 属性
      *name{SLOT}                          typeglobコンポーネントアクセス
      \p{} / \P{}                          正規表現内Unicodeプロパティ

    Perl 5.8
      use encoding
      use constant { A => 1, B => 2 }      複数定数ハッシュリファレンス形式

    Perl 5.10
      //=                                  定義済み判定代入演算子
      //                                   定義済み判定演算子(単体)
      say                                  (->say() メソッド呼び出しは除外)
      state $var
      given(...) / when(...)
      ~~                                   スマートマッチ
      use feature
      \K                                   正規表現内 keep
      (?<name>...) / \k<name>              名前付きキャプチャ/後方参照
      (?|...)                              ブランチリセットグループ
      (*VERB)                              バックトラック制御動詞
      \h \H \v \V \R                       正規表現内空白エスケープ
      UNITCHECK { }                        フェーズブロック
      a++ / a*+ / a?+                      所有量化子
      (?1) / (?&name) / (?R)               再帰パターン
      ${^MATCH} ${^PREMATCH} ${^POSTMATCH} マッチ変数(/pフラグ使用時)
      \g{N}                                相対/絶対後方参照

    Perl 5.12
      package NAME VERSION
      ...                                  ヤダヤダ演算子

    Perl 5.14
      s///r  tr///r                        非破壊フラグ

    Perl 5.16
      __SUB__

    Perl 5.18
      my sub foo { }                       レキシカルサブルーチン宣言
      state sub foo { }

    Perl 5.20
      sub foo ($x, $y) { }                 サブルーチンシグネチャ
      $ref->@*  $ref->%*                   後置デリファレンス(5.24で安定化)
      %hash{LIST}  %array[LIST]            キー/値スライス(新構文)

    Perl 5.22
      <<>>                                 ダブルダイヤモンド演算子
      /n                                   非キャプチャ正規表現フラグ
      $a &. $b  $a |. $b  ^.=  ~.$a       文字列ビット演算子(5.28で安定化)
      foreach \$x (@list)                  リファレンスエイリアス(foreach)

    Perl 5.26
      <<~                                  インデント付きヒアドキュメント

    Perl 5.30
      (?<=.{2,}X)                          可変長 lookbehind(実験的、5.38で安定化)

    Perl 5.32
      $obj isa ClassName                   isa 中置演算子
                                           (->isa() および isa() 呼び出しは除外)

    Perl 5.34
      try { } catch ($e) { }

    Perl 5.36
      use builtin
      for my ($a, $b) (@list)              ペアイテレーション

    Perl 5.38
      class Foo { }                        class キーワード
      可変長 lookbehind(安定化)

    Perl 5.40
      $x ^^ $y  /  $x ^^= $y              高優先度論理 XOR 演算子
      __CLASS__                            class ブロック内のランタイムクラス名

    Perl 5.42
      any { EXPR } @list                   キーワード演算子(List::Util が
      all { EXPR } @list                   any/all をインポートする場合は抑制)
      my method foo () { }                 レキシカルメソッド宣言
      $obj->&foo()                         レキシカルメソッド呼び出し

doc/Perl500503Syntax-OrDie_cheatsheet.JA.txt  view on Meta::CPAN

    3引数 open()
      open(FH, MODE, PATH) 形式。2引数形式 open(FH, ">path") を使用すること。
    use utf8
      ソースファイルが UTF-8 エンコードされていることを宣言。
    use VERSION(>= 5.006 または v5.6)
      最低Perlバージョンを "use 5.006" または "use v5.6" で指定。
    \x{HHHH} Unicodeエスケープ
      0xFF を超えるUnicodeコードポイントの拡張16進エスケープ。
    \N{name} 名前付き文字エスケープ
      正規表現/文字列内の名前付きUnicode文字(例: \N{SNOWMAN})。
    @+ および @- / $+[N] $-[N]
      直近の正規表現マッチの開始/終了位置を保持する配列。
    CHECK { } / INIT { } フェーズブロック
      特定のコンパイル/実行フェーズで実行される名前付きブロック。
      (END { } と BEGIN { } は 5.6 以前から利用可能。)
    vストリング記法(v1.2.3)
      v5.6.1 などのベクタ文字列。
    $^V バージョンオブジェクト
      5.005_03 互換には数値の $] を使用すること。
    :lvalue サブルーチン属性
      サブルーチンを有効なlvalue(代入可能)としてマーク。
    *name{SLOT} typeglobコンポーネントアクセス
      *FH{IO}、*foo{SCALAR}、*foo{CODE} 等。Perl 5.005_03 では未対応。
    \p{Property} / \P{Property} Unicode プロパティエスケープ
      Unicodeプロパティで文字をマッチ(例: \p{IsAlpha})。
    明示的モードなし mkdir()
      5.6以降は mkdir(PATH) のデフォルトが 0777。
      5.005_03 では引数が必須: mkdir(PATH, MODE)。

  perl58delta(Perl 5.8.0、2002-07-18)
    use encoding
      ソースエンコーディングプラグマのロード(例: "use encoding 'euc-jp'")。
    use constant { A => 1, B => 2 }
      複数定数のハッシュリファレンス形式。5.005_03 互換には個別の
      "use constant" 文を使用すること。

  perl5100delta(Perl 5.10.0、2007-12-18)
    // 定義済み判定演算子
      "$x // $y" は "defined($x) ? $x : $y" と等価。
    //= 定義済み判定代入
      "$x //= $y" は $x が未定義なら $y を代入。
    say LIST
      printと同様だが改行を追加。
      注: ->say() メソッド呼び出しおよび "say =>" ハッシュキーは対象外。
    state VARIABLE
      レキシカルスコープの永続変数(CのstaticのようなPONYに)。
    given(EXPR) { when(VAL) { ... } }
      switch/case構文(5.10で実験的、5.36以降で削除)。
    ~~ スマートマッチ演算子
      様々な型のオーバーロード比較演算子。
    use feature
      名前付き言語機能を有効化(say、state、switch等)。
    \K(正規表現内 keep)
      マッチ文字列の開始位置をリセット。
    (?<name>...) 名前付きキャプチャグループ / \k<name> 名前付き後方参照
    (?|...) ブランチリセットグループ
      各代替でキャプチャグループ番号をリセット。
    (*VERB) バックトラック制御動詞
      (*FAIL)、(*ACCEPT)、(*PRUNE)、(*SKIP)、(*MARK)、(*COMMIT)、(*THEN)。
    \h \H \v \V \R 空白エスケープ
    UNITCHECK { } フェーズブロック
      各コンパイルユニットのコンパイル終了時に実行。
    所有量化子 a++ a*+ a?+ a{n,m}+
      バックトラック時に返却しない量化子。
    (?PARNO) (?&name) (?R) 再帰サブパターン
    ${^MATCH} ${^PREMATCH} ${^POSTMATCH}
      /pフラグ使用時の $&、$`、$' の等価物。
    \g{N} \g{-N} 絶対/相対後方参照

  perl5120delta(Perl 5.12.0、2010-04-12)
    package NAME VERSION
      パッケージ宣言とバージョン指定の一体化。
    ... ヤダヤダ演算子
      未実装コードのプレースホルダ。到達時に "Unimplemented" を throw。

  perl5140delta(Perl 5.14.0、2011-05-14)
    s/PATTERN/REPLACEMENT/r  tr/LIST/LIST/r
      非破壊的な置換/変換フラグ。元の文字列を変更せず変換結果を返す。

  perl5160delta(Perl 5.16.0、2012-05-20)
    __SUB__
      現在実行中のサブルーチンへの参照("use feature 'current_sub'" で有効化)。

  perl5180delta(Perl 5.18.0、2013-05-16)
    my sub NAME / state sub NAME — レキシカルサブルーチン(実験的)
      ブロックスコープのサブルーチン宣言。Perl 5.26以降は常に有効。

  perl5200delta(Perl 5.20.0、2014-05-27)
    サブルーチンシグネチャ(実験的)
      sub foo ($x, $y = 0) { ... }
    %hash{LIST} / %array[LIST]  キー/値スライス(新構文)
      キーと値のペアのフラットリストを返す新しい % シジル構文。
    後置デリファレンス(実験的; Perl 5.24で安定化)
      $ref->@*   $ref->%*   $ref->&*   $ref->$*

  perl5220delta(Perl 5.22.0、2015-06-01)
    <<>> ダブルダイヤモンド演算子
      ARGVの各ファイルを3引数openで安全に開く <> の安全版。
    /n 非キャプチャ正規表現フラグ
      すべてのキャプチャグループを非キャプチャにする。
    &. |. ^. ~.  文字列ビット演算子(実験的; Perl 5.28で安定化)
      オペランドを一貫して文字列として扱う。複合代入形式 &.= |.= ^.= も対象。
    \foreach リファレンスエイリアス(実験的)
      foreach \my $x (@list) { ... }  で $x を各要素に直接束縛。

  perl5260delta(Perl 5.26.0、2017-05-30)
    <<~ インデント付きヒアドキュメント
      ヒアドキュメント本体から先頭の空白を除去。

  perl5300delta(Perl 5.30.0、2019-05-22)
    正規表現内の可変長 lookbehind(実験的導入)
      (?<=...) または (?<!...) でパターンの長さが可変なものが
      コンパイル可能に(それ以前は致命的エラー)。Perl 5.38で安定化。

  perl5320delta(Perl 5.32.0、2020-06-20)
    isa 中置演算子
      $obj isa "ClassName"($objが参照でなくても定義済み)。
      注: ->isa() メソッド呼び出しおよび isa() 関数呼び出しは対象外。

  perl5340delta(Perl 5.34.0、2021-05-20)
    try / catch(実験的、use feature 'try' で有効化)



( run in 1.100 second using v1.01-cache-2.11-cpan-9581c071862 )