App-Bin4TSV-6

 view release on metacpan or  search on metacpan

csel  view on Meta::CPAN

#!/usr/bin/perl -T
use 5.008 ; use strict ; use warnings ; # 5.011
use Getopt::Std ; getopts '~=!R:d:0:h:i:np:rt:' , \my %o ; 
use List::Util qw [ max ] ;
use Encode qw/decode_utf8/ ; 
use Memoize ; 

use Data::Dumper ;
use Term::ANSIColor qw[ :constants] ; $Term::ANSIColor::AUTORESET = 1 ;

memoize ( 'sCols' ) ; # このプログラムに現れる sCols 関数を高速化する。 
$| = 1 if $o{'!'} ; 

my %cream ; # 列の番号の配列を格納する。
 # $cream{p} 出力するよう指定した列番号の無名配列
 # $cream{d} 削除するよう指定した列番号の無名配列
 # $cream{h} 先頭に移動するように指定した列番号の無名配列
 # $cream{t} 末尾に移動するように指定した列番号の無名配列

csel  view on Meta::CPAN

 
  return [ @out ] ; 
}


# 各行の出力処理。 sCols関数を呼び出して、選択する。-n で列番号も付ける。
sub line ( ) { 
  chomp ; 
  & R0proc ; 
  $_ = decode_utf8 ( $_ ) if $isep eq '' ; # 入力がSTDINとは限らないので binmode を使わず decode_utf8
  my @F = split /$isep/ , $_ , $split_limit   ; #use Data::Dumper ; print scalar @F , Dumper [@F];  
  @F = map { $_ + 1 . ":$F[$_]" } 0 .. $#F  if $o{n} ;   # -n で列番号をコロンを付けて出力
  push @F , $emp ; # $F[-1] で参照する
  print join ( "$osep" , @F [ @{ sCols $#F } ] ) , "\n" ; 
}

# main 
sub main { 

  binmode STDOUT ,":utf8" if $isep eq ''  ; # 文字単位で処理する場合、utf8としての扱いをする。
  # 一行目かつ -= が指定された場合の処理



( run in 0.246 second using v1.01-cache-2.11-cpan-4d50c553e7e )