> I want to automatically print a variable's name. > > For example: > ################################### > #!/usr/bin/perl > use warnings; > use strict; > > my $string = '1,2,3,4'; > my @a = (my $var1, my $var2, my $var3, my $var4)= split (/,/, $string); > foreach my $element (@a) {print "elementname"\t$element\n} > ################################## > > this prints: > elementname 1 > elementname 2 > elementname 3 > elementname 4 > > I want: > > 'var1' 1 > 'var2' 2 > 'var3' 3 > 'var4' 4 > > Is there a way of getting the variable's name as a literal automatically, > without resorting to a hash? There is no means of mapping a lexically scoped variable's value to it's name. You can map names to values, but not the other way around. Even if you/anyone else can think of something I've overlooked - it'd probably be ugly. I came up with: local $_ = 'Jonathan Paton,Scotland,jonathanpaton@yahoo.com'; my @field = qw(name lives email); my @data = split /,/; for(my $ctr=0; $ctr <= $#field; $ctr++) { print "$field[$ctr] = $data[$ctr]\n"; } but that's UGLY. What exactly is wrong with using hashes... if output order matters: use constant NAME => 0; use constant LIVES => 1; use constant EMAIL => 2; my @data = split /,/; print @data[NAME]; Jonathan Paton __________________________________________________ Do You Yahoo!? Everything you'll ever need on one web page from News and Sport to Email and Music Charts http://uk.my.yahoo.comThread Previous | Thread Next