The following codes are not accepted by Perl and even string concatenation
doesn't work. Any suggestions?
#!/usr/bin/perl
$infile = $ARGV[0];
foreach $k (0..10) {
$outfile = $infile . $k;
open (OFP$k, ">$outfile");
}
$i = $size/10000;
print OFP$i "something"; #0-10k, 10-20k, .... 90-100k...
> The following codes are not accepted by Perl and even string
> concatenation doesn't work.
Doesn't work is not a good problem description.
> Any suggestions?
See below.
> #!/usr/bin/perl
use strict;
use warnings;
> $infile = $ARGV[0];
> foreach $k (0..10) {
You realize that loops 11 times, right?
> $outfile = $infile . $k;
> open (OFP$k, ">$outfile");
First off, you should check if open succeeded. Second, what makes you
think you can use OFP$k where Perl expects a filehandle.
This looks like a very poor attempt at using symbolic file handles (if
such a thing even exsits, I don't know).
When you find yourself wanting to index something using an integer, you
should use an array.
> }
>
> $i = $size/10000;
> print OFP$i "something"; #0-10k, 10-20k, .... 90-100k...
#!/usr/bin/perl
use strict;
use warnings;
my ($prefix) = @ARGV;
die "No prefix specified\n" unless defined $prefix;
my @out;
for my $i ( 0 .. 9 ) {
my $name = "${prefix}${i}";
if ( open my $fh, '>', $name ) {
push @out_h, { name => $name, handle => $fh };
}
else {
warn "Error opening '$name': $!\n";
}
}
for my $file ( @out ) {
my $handle = $file->{handle};
my $name = $file->{name};
print $handle "This is $name\n";
unless ( close $handle ) {
warn "Error closing '$name': $!";
}
undef $file->{handle};
}
__END__
Sinan
--
A. Sinan Unur <1u...@llenroc.ude.invalid>
(remove .invalid and reverse each component for email address)
comp.lang.perl.misc guidelines on the WWW:
http://www.rehabitation.com/clpmisc/
Yes, it does. A filehandle is just an unquoted string, so
open "OFP$k", ">$outfile";
'works', FSVO.
(I'm leaving this bit in just in case anyone gets the wrong idea from
this post... :) )
> When you find yourself wanting to index something using an integer, you
> should use an array.
Ben
--
I touch the fire and it freezes me, [b...@morrow.me.uk]
I look into it and it's black.
Why can't I feel? My skin should crack and peel---
I want the fire back... Buffy, 'Once More With Feeling'
Does "works" mean it does not generate error but still cannot achieve the
effect of printing into different files? Because I'm able to open empty
file1, file2, ..., file10 but nothing is printed into them.
Unless $size is always evenly divisible by 10000 then $i will not be
the number you expect it to be (use $i = int($size/10000); instead)
and it will never print into one of the file handles you have open.
(for example, $size = 11,000 then $i = 11000/10000 will equal 1.1, not
the "1" you expect.)
Bill H
Unless $size is always evenly divisible by 10000 then $i will not be
the number you expect it to be (use $i = int($size/10000); instead)
and it will never print into one of the file handles you have open.
(for example, $size = 11,000 then $i = 11000/10000 will equal 1.1, not
the "1" you expect.)
Bill H
Yes, u a right. and I've already added int ($size/10000)
use strict;
use warnings;
my @fh;
my $k = 0;
open $fh[$k],'>','/tmp/test.txt' or die $!;
print {$fh[$k]} "Hello\n" or die $!;
close $fh[$k] or die $!;
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Anwendungen für Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel
Tested and confirmed to work, but also thank Sinan's great efforts. Also the
reminder from Bill. And lastly, Ben. He always helps me a lot.
>
> Quoth "A. Sinan Unur" <1u...@llenroc.ude.invalid>:
>> "Ela" <e...@yantai.org> wrote in
>> news:g0jl3m$cj$1...@ijustice.itsc.cuhk.edu.hk:
>>
>> > open (OFP$k, ">$outfile");
>>
...
>> This looks like a very poor attempt at using symbolic file handles
>> (if such a thing even exsits, I don't know).
>
> Yes, it does. A filehandle is just an unquoted string, so
>
> open "OFP$k", ">$outfile";
>
> 'works', FSVO.
>
> (I'm leaving this bit in just in case anyone gets the wrong idea from
> this post... :) )
>
>> When you find yourself wanting to index something using an integer,
>> you should use an array.
Thank you. I should have checked that myself. I am hoping that the OP
dropped the use of "OFP$k" in favor of $OFP[$k].