Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl Monk, Perl Meditation
 
PerlMonks  

Re: Array in Array

by Abigail-II (Bishop)
on Oct 06, 2003 at 12:37 UTC ( [id://296918]=note: print w/replies, xml ) Need Help??


in reply to Array in Array

I'm not sure what you want (and I've no idea what you find 'spooky'), but does this do it for you?
#!/usr/bin/perl use strict; use warnings; use YAML; my @accounts = ("A x1 B y1 C z1 D v1 E w1 F", "A x2 B y2 C zzz2 D v2 E w2 F", "A x3 B y3 C z3 D v3 E w3 F", "A x4 B y4 C z4 D v4 E wwww4 F", "A x5 B y5 C z5 D v5 E w5 F", "A x6 B y6 C z6 D v6 E F"); my @fields = ("A", "B", "C", "D", "E"); no warnings 'misc'; my @accounts_2 = map {[@{{split}}{@fields}]} @accounts; print Dump \@accounts_2; __END__ --- #YAML:1.0 - - x1 - y1 - z1 - v1 - w1 - - x2 - y2 - zzz2 - v2 - w2 - - x3 - y3 - z3 - v3 - w3 - - x4 - y4 - z4 - v4 - wwww4 - - x5 - y5 - z5 - v5 - w5 - - x6 - y6 - z6 - v6 - F

Short explaination of the map line: Take each element of @accounts, split it on white space, make an anonymous hash out of the results, and take a hash slice of that, indexed on @fields. Create an anonymous array of the result of the slice.

Abigail

Replies are listed 'Best First'.
Re: Re: Array in Array
by nylon (Acolyte) on Oct 06, 2003 at 13:16 UTC
    Abigail,
    Thanks for the help.
    I get
    ARRAY(0x253a350) ARRAY(0x2536024) ARRAY(0x2532bb8) ARRAY(0x248e328) ARRAY(0x248c1d0) ARRAY(0x2488e40)
    if I run :
    sub tweezers_sub { my @accounts_2 = map {[@{{split}}{@fields}]} @accounts; foreach $rec(@accounts_2) { print FH_temp ("$rec\n"); } # Prints all array records to the output file }
    That's what I call the "spooky stuff". :-)
    Nylon
    (PS: have installed the YAML module. Nice :-)
      Your $rec variable is actually a reference to an array. You should dereference it, for example by writing my @rray = @$rec;, or, TIMTOWTDI:
      #!/usr/bin/perl use strict; use warnings; my @accounts = ("A x1 B y1 C z1 D v1 E w1 F", "A x2 B y2 C zzz2 D v2 E w2 F", "A x3 B y3 C z3 D v3 E w3 F", "A x4 B y4 C z4 D v4 E wwww4 F", "A x5 B y5 C z5 D v5 E w5 F", "A x6 B y6 C z6 D v6 E F"); my @fields = ("A", "B", "C", "D", "E"); sub tweezers_sub { my @accounts_2 = map { [@{{/([A-Z])\s+([a-z]+\d|\s)/g}}{@fields} ] +} @accounts; for my $rec (@accounts_2) { print "'" . join("' - '", @$rec) . "'\n"; } } tweezers_sub;
      This uses a RegEx instead of a split, but you can still see how $rec is dereferenced by writing @$rec.
      Hope this helped.
      CombatSquirrel.
      Update: Mixed up referencing and dereferencing. Fixed.
      Entropy is the tendency of everything going to hell.
      That's what you are supposed to get - you are printing out a reference to an array. What did you expect to get?

      Abigail

        I was hoping on the content. Life is not simple for an apprentice. :-( ;-)
        Nylon

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://296918]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others contemplating the Monastery: (6)
As of 2024-04-23 21:37 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found