説明
% perl -- - foo
print $ARGV[0] . "\n" ;
^D
-
^D
は、 control + D -
--
はコマンドラインオプションの終了を示す。 -
-
は標準入力を明示するもの。
--
も -
も perlrun
に書かれてはいるものの、--
は説明すらない1。
このまま直接、標準入力を編集するのは、いささか使い勝手が悪い。と言う事で。
$ perl -- <<"EOF" - foo
>print $ARGV[0] . "\n" ;
>EOF
- このヒアドキュメントはシェルのヒアドキュメント。標準入力からのインプットとなるので、
-
を明示しなければならない。-
-
は本来のプログラムファイルを指定する位置に。 -
<<"EOF"
の部分はコマンドラインのどこに置いても良い。
-
活用
perl の捨てスクリプト程ではないが、一つのファイルにして保存するのにはちょっとねえ。だけど、ワンライナーには長すぎる。そんなスクリプトは、上記の機能を使って *ash
の function
にして *ashrc
にでも入れる。
例えば、
function checkprim(){
perl -- <<"EOF" - "$@"
use v5.12 ;
use warnings ;
use autodie ;
my $seq = '' ;
open my $fh, '<', $ARGV[0] ;
while (<$fh>){
chomp ;
next if />/ ;
$seq .= $_ ;
}
close $fh ;
( my $prim = $ARGV[1] ) =~ tr/ACGT/N/c ;
#( my $prim2 = reverse q{CTNTTNCCNCTTCACTCG} ) =~ tr/ACGT/TGCA/
for my $i ( 0 .. ( length $seq ) - 1 ){
my $score = 0 ;
SEGMENT:
for my $j ( 0 .. ( length $prim ) - 1 ){
last SEGMENT if $i + $j >= length $seq ;
my $q = substr $seq, $i + $j, 1 ;
my $r = substr $prim, $j, 1 ;
CHECK:
{
last CHECK if $q eq $r ;
last CHECK if $r eq 'N' ;
next SEGMENT ;
}
$score ++ ;
}
printf "%s\n", join "\t", $score, $i + 1 ;
}
EOF
}
プライマーを作成した際の簡易的なチェックに使う。
わざわざ、専用のアプリを立ち上げるのも、、、って時に、source
しとけば、
$ checkprim SINGLEFASTA ACGTACGTACGT | sort | tail -2
てな事で貼る場所の見当が付く。
論文などに書かれてるプライマー配列は、往々にして R
だの Y
だの入っているが2、そこはバッサリと N
に変換してカウントする形に3。