in reply to Reading File Into Array

There are multiple issues to deal with here, potentially including list vs scalar context and subtleties re lists vs arrays.... but the following is one method avoiding those, written to be utterly explicit about each step, and using your Arsenal data:

# filehandler.pl #1158919 use strict; use warnings; use 5.018; sub read_file { my (@names, @out); my @lines = <>; chomp(@lines); for my $line(@lines) { @names = split /,/, $line; for my $name (@names) { push @out, $name; } } for my $item(@out) { print $item . "\n"; } } read_file;

We could, of course, append the newline after each name at Ln 13, instead of in Ln17, but either would satisfy your desire to "print each element of the array on a newline."

Replies are listed 'Best First'.
Re^2: Reading File Into Array
by Irishboy24 (Sexton) on Mar 28, 2016 at 03:28 UTC
    Thank you for this. I came up with this but the ouput is different to yours. what am i doing wrong here?
    sub read_file { @lines = <>; chomp(@lines) ; @lines = join (',',@lines); for $i(@lines){ print $i . "\n"; } } &read_file;

      Not a cure here, but please, save yourself much future grief, by getting into the habit of using strict and warnings.

      Also, read the FAQs here: good questions show output, desired output and (errors and warnings) if any.


      Questions containing the words "doesn't work" (or their moral equivalent) will usually get a downvote from me unless accompanied by:
      1. code
      2. verbatim error and/or warning messages
      3. a coherent explanation of what "doesn't work actually means.
      I think i realised this after your message . What i was think of as an array was in fact a list ?. I changed my code accordingly and it worked
      sub read_file { @lines = <>; chomp(@lines) ; $oldlines = join (',',@lines); $oldlines =~ s/,/\n/xg; print $oldlines; } &read_file;

        I'm still not clear about your understanding of lists and arrays, but this is definitely an improvement. However, please note, the ampersand in the subcall is unnecessary... and unwise. Super Search will reveal many explanations.