in reply to Useless use of private variable in void context at

You are using a C style for loop. The first element of the for loop header is an initialization statement, but $i doesn't actually do anything - it is a variable used in a silly place (void context) because the value isn't used there.

But, you'd be much better to use a Perl loop:

for my $i (0 .. 5006) { ... }

which makes what is going on much clearer. But for your particular problem you could:

#!/bin/perl use strict; use warnings; my $thing = join '', map{qw(a t c g)[rand 4]} 1 .. 5007; my $fName = "./test"; open my $outFile, '>', $fName or die "Can't create '$fName': $!\n"; print $outFile $thing; close $outFile;

Note the three parameter open, lexical file handle and a check that the open succeeded.

Perl is the programming world's equivalent of English

Replies are listed 'Best First'.
Re^2: Useless use of private variable in void context at
by Anonymous Monk on Nov 23, 2014 at 22:54 UTC

    Thanks!

Re^2: Useless use of private variable in void context at
by RonW (Parson) on Nov 24, 2014 at 18:10 UTC

    Note that for (;$i<5007;$i++) is also valid.

    Update:

    While this is considered "very un-Perl-ish", it is very common in C/C++ and even C# (though both C++ and C# also have for-each syntax, as well). Therefore, there are many developers who are more comfortable with this form.

      Also needlessly obscure and error prone compared to a Perl loop (for (1 .. 5007) {...}) used for performing some number of iterations of a loop.

      Perl is the programming world's equivalent of English