The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

$0

 入力の各行をタブ文字列で列に分割し、各列の sha1 和を求める。
 ただし、 sha1和を求める際に、各行について行番号と改行文字を加えている。
  スイッチオプションとして、-p を用いると、各行の sha1 についての
  全行に渡る排他的論理和を出力する。
 
   2次情報として、計算にかかった秒数と、読み込んだ行数を出力する。
   列数が変わる場合も考慮してある。

 想定されている用途例 : 
   * いくつかの列が、全く同じ値を取っていることを確認するため。
   * いくつかの列が、順序を無視すると、全く同じ値を取ることを確認するため。
   * 大きなデータをソートした後に、欠損や不要な汚染が起きていないことの確認のため。

 オプション: 
  -p : 各行についてのSHA1ダイジェスト値の全行に渡る排他的論理和を出力する。
  -8 : 各列について8文字幅(4バイト)に縮約した16進値を表示する。20バイトを5バイトごとに切ってxorを取っている。
  -1 : 列数が変動する場合に備え、行番号も内部で付加して計算しているが、それを解除する。

  開発上の注意 :
    sha1値を計算して、符号無し32ビット整数を用いてる。64ビット環境なら問題ないはず。
    もしも、符号無し16ビット整数に変えるなら下記が必要と考えられる。
    unpack 'L5' を unpack 'S10' に変え、"%08x" の2箇所を"%04x" に変更。xor5 を xor10に変更。