- ベストアンサー
Perlでファイル処理を行う方法について
- Perlのサブルーチンではなく、forループを使用してファイル処理を行いたい場合、自由にファイル数と条件を指定して実行することは可能です。
- 初心者でも理解しやすいように、forループの回数を指定するようにして、処理条件やファイル名を指定する際には、標準入力を使用する方法をご紹介します。
- この方法を使用すれば、柔軟にファイル処理を行うことができます。Perlの初心者でも分かりやすいように、具体的なサンプルコードも提供します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
以下を組み合わせたら何かしら出来るかと思います。 # STDINで指定 chomp( my $stdin = <STDIN> ); # forで$stdin回まわす my $name = "hoge"; for (1..$stdin) { print $name . $_ , "\n"; } # Tagを回す my @tags = qw(AGT ACA TAT TGA); foreach my $tag (@tags) { print "$tag\n"; }
その他の回答 (1)
- MillenniuM
- ベストアンサー率58% (42/72)
コマンドラインのオプションを取り扱いたいんだと想像します。 次のスクリプトでは次のオプションが使えます。 -t LIST or --tag=LIST コンマ区切りのタグ文字列を指定します。複数回指定できます。 -o PATH or --ouput=PATH 出力ファイルのプリフィクスです。デフォルトはスクリプトの名前+'-output-'。 -n or --num 出力ファイル名の連番を数字にします。デフォルトはアルファベットです。 例: $ perl arg.pl --tag=a,b,c arg-output-a a arg-output-b b arg-output-c c $ perl arg.pl --tag=a --tag=b --tag=c --output=path- path-a a path-b b path-c c $ perl arg.pl -t a,b,c -o path- --num path-1 a path-2 b path-3 c arg.pl: #!/usr/bin/perl use strict; use warnings; use v5.10; use File::Basename; use Getopt::Long; my @tag; my $output = basename($0, '.pl') . '-output-'; my $num; GetOptions( 'tag=s' => \@tag , 'output=s' => \$output , 'num' => \$num ); @tag = split(/,/, join(',', @tag)); my $suffix = 'a'; if ($num) { $suffix = '1'; } foreach (@tag) { &aaa($output.$suffix++, $_); } sub aaa { # 単に引数をプリントするだけ my ($output, $tag) = @_; say $output; say $tag; }