perl 根据变量决定内容输出到哪个文件 5

有两个文件:file0、file1$i=0;$str="xxxxxxxxx";while($i++){$o=$i%2;openOUT,">>file$o";printOU... 有两个文件:file0、file1
$i = 0;
$str = "xxxxxxxxx";
while ($i++) {
$o = $i%2;
open OUT, ">>file$o";
print OUT "$str";
close OUT;
last if ($i>=100);
}。
能有方法,不需要在while语句里面打开文件吗?因为这样就要打开100次文件。
但其实一直打开的就是file1、file2这两个文件。
其实我这里是一个例子,实际上可能不止一个输出的文件,当这个输出的文件个数可变是,用大家给的这些方法就不方便了。
我后来想到用数组来代替文件句柄。
例如:
#!/usr/bin/perl
my @file_handle;
my $num = $ARGV[0];
for (my $i=0; $i<$num; $i++) {
open $file_handle[$i], ">file$i" || die;
}
my $j = 0;
my $i;
while (1) {
$i = $j % $num;
print $file_handle[$i] $j,"\n"; #但是这里语法有问题,即使中间加逗号也没有结果出来。请问大家知道为什么吗?
last if ($j++>=100);
}
for (my $i=0; $i<$num; $i++) {
close $file_handle[$i];
}

20160422:再研究,发现把print $file_handle[$i] $j,"\n"; 改为:print {$file_handle[$i]} $j,"\n"; 就行。
展开
 我来答
cysco
2012-07-05 · TA获得超过170个赞
知道答主
回答量:89
采纳率:0%
帮助的人:49.3万
展开全部
大致可以这样

$i=0;
$str="xxxxx";
open OUT1, ">>file0";
open OUT2, ">>file1";
while ($i++) {
$o=$i%2;
if ($o=1) {print OUT1 $str;}
else {print OUT2 $str;}
last if $i>=100;
}

还有更简洁的是用eval,但是要调试多次才能成功,大意如下
while ($i++) {
$o=$i%2;
eval "print OUT$o $str";
last if $i<100;
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wangge9
2012-07-10 · TA获得超过383个赞
知道小有建树答主
回答量:163
采纳率:0%
帮助的人:132万
展开全部
我理解楼主的意思是不要打开100次文件的动作,我的思路是在while中将print改成赋值,等while结束了再一次写入到文件,代码没有优化,只求能够表单我的意思。

#!/usr/bin/perl
use warnings;
use strict;

my $i = 0;
my $str = "xxxxxx";
my @file1 = my @file2 = ();
while ($i <= 100){
my $o = $i % 2;
if ($o == 1){
push @file1,$str;
}elsif($o == 0) {
push @file2,$str;
}
$i++;
}
my $file1 = '/tmp/file1';
open my $fh1,">>",$file1 or die "can't open file1 $!\n";
print $fh1 join "\n",@file1;
close $fh1;
my $file2 = '/tmp/file2';
open my $fh2,">>",$file2 or die "can't open file2 $!\n";
print $fh2 join "\n",@file2;
close $fh2;

__END__
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友96ffcf7
2015-07-02 · 知道合伙人互联网行家
百度网友96ffcf7
知道合伙人互联网行家
采纳数:22719 获赞数:118726
从事多年网络方面工作,有丰富的互联网经验。

向TA提问 私信TA
展开全部
open OUT0,">>file0";
open OUT1,">>file1";

$str = "xxxxxxxxx";
while ($i++) {
if($i%2){
open OUT1, ">>file$o";
print OUT1 "$str";
}else{

open OUT0, ">>file$o";
print OUT0 "$str";
}
last if ($i>=100);
}。
close OUT0
close OUT1
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
liucy1983
2012-07-06 · TA获得超过288个赞
知道小有建树答主
回答量:299
采纳率:0%
帮助的人:214万
展开全部
直接在外面打开两个文件,然后在while里用IF,或者直接写$o=1 ? print OUT1 "$str" : print OUT2 "$str";
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
edwinevaner
2012-07-05 · 超过17用户采纳过TA的回答
知道答主
回答量:70
采纳率:0%
帮助的人:41.9万
展开全部
$i = 0;
$str = "xxxxxxxxx";
open fa,">file0" or die "open file0 failed\n";
open fb,">file1" or die "open file1 failed\n";
while ($i++) {
$o = $i%2;
if ($o == 0) {select f0;} else {select f1;}
print "$str";
last if ($i>=100);
}
close f0;close f1;
select STDOUT;
print "Don't forget give me money\n";
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式