in reply to writing each array element to a unique file

Hi garbage777,

Here's one way to do it:

use strict; use warnings; use FileHandle; for (my $i = 0; $i < @myArr; $i++) { my $value = $myArr[$i]; my $index = $i + 1; my $file = "file${index}"; write_value_to_file($value, $file); } sub write_value_to_file { my ($val, $fname) = @_; my $fh = new FileHandle; open($fh, ">", $fname) or die "unable to write $fname ($!)\n"; print $fh "$val\n"; close $fh; }

s''(q.S:$/9=(T1';s;(..)(..);$..=substr+crypt($1,$2),2,3;eg;print$..$/

Replies are listed 'Best First'.
Re^2: writing each array element to a unique file
by geekphilosopher (Friar) on Dec 15, 2006 at 03:08 UTC

    Since you mentioned that you're new to Perl and programming in general, let me explain this line by line. I've been working introductory tutorials for work, so I figure this is good practice. My apologies if you already know some of these.

    use strict; use warnings;

    These two lines are called "pragmas" and make your program less tolerant of sloppy code. You should start every Perl program with these two lines.

    use FileHandle;

    Use the built-in FileHandle module, which allows you to treat file handles (variables in the program that represent files) as objects (a programming construct that allows you to treat a variable as a self-contained entity with properties and "things it can do", also called methods).

    for (my $i = 0; $i < @myArr; $i++) {

    Create a new variable called $i, make it equal to 0. Repeat the following section (the section down to the matching '}') as long as the value of $i is less than the number of elements in the @myArr array. After finishing each loop, increment $i and do the test again.

    # set $value to the value held in the array position we're on my $value = $myArr[$i]; # set $index to one more than our current array position my $index = $i + 1; #create our filename - when i = 0, it will be "file1" my $file = "file${index}"; write_value_to_file($value, $file); # call our function below with our current value and filename } # end the for block

    Now we'll look at the function (or subroutine) write_value_to_file:

    #we're starting a new subroutine sub write_value_to_file { # set two variables from the values given to this function my ($value, $fname) = @_; #create a new FileHandle object my $fh = new FileHandle; # open the file name in $fname for writing, and refer to it by $fh open ($fh, ">", $fname) # if opening the file failed, tell the user why and exit or die "unabel to write $fname($!)\N" #write the value, followed by a newline character, to the file print $fh "$val\n"l # tell the program we're done with this file. close $fh; #close the function }

    Hopefully this was at least a little helpful.

    UPDATED: mention $i++. Thanks johngg!

      <nit>

      When you explained the for loop you omitted to mention that $i is incremented at the end of the code section before the completion test is done and the section is repeated.

      </nit>

      If tutorials are intended for complete beginners, it probably pays to explain every last detail.

      Cheers,

      JohnGG

      Hi, Thank you very much for a detailed explanation. Best, garbage777
Re^2: writing each array element to a unique file
by garbage777 (Acolyte) on Dec 18, 2006 at 03:48 UTC
    Hi liverpole, Thank you very much. Best, garbage777