> [EMAIL PROTECTED] wrote: > > > Hi All > > > >Prob: I want to convert all the elememts of an array to ascalor variable tha > t I can use latter on in my code > >e.g. > > > >my @array=qw/balli johney bobby/; > >now here i need 3 different variable with the above values i.e. > >my $name1=balli ; > >my $name2=johney ; > >my $name3=bobby ; > > > >Soln so far: > > > >my ($i) ; > >for ($i=0; $i<@array;$i++) > >{ > >$name=$array[$i] ; # lost here is to how to have different $name each time a > lso how can make these > > > my $i; > for ($i=0; $i<@arrayl $i++) { > $name$i=$array[$i]; > } > > That way you don't need to know in advance how many $name variables you > need. >
NO, NO, NO, NO, NO!!!!!!!!!!!!!!!!! First: Your code doesn't even work. Second: It is not actually SOLVING anything. variables of the form $name0, $name1, $name2 ... do not provide **ANY** functional difference from $array[0], $array[1], and $array[2] Write that on the blackboard fifty times. That is to say: $array[0] is a first-class citizen, just as good as $name0 -- iterating in the worst possible way[1] across an array to create copies of the data provides NO additional functionality to the code. I suspect if the original poster could read and write English he (she?) would be able to explain what was really needed. There *are* times when exploding an array into a series of separately named scalars *does* make sense. Think how stupid the following is: my @array; ($array[0], $array[1], $array[2], $array[3], $array[4], $array[5], $array[6], $array[7], $array[8] ) = localtime(time); But, if we rewrite it thusly... my ($second, $minute, $hour, $month_day, $month, $year, $weekday, $yearday, $isdst ) = localtime(time); ...the phrase makes sense. You are expanding the list of nine data returned by localtime into convenient mnemonic variables. (Getting further afield: I would probably never do THAT either -- if I have a series of nine things that are tightly coupled, I would want some better data structure to hold them. A hash or hashref, would be perfect.) my $localtime; @$localtime{qw / second minute hour mday month year weekday yearday isdst /} = localtime(time); [1] A style nit: Write Perl, not C. If you DO need to iterate across all the indices for an array ( rarely necessary if you have designed your data correctly ) do it right: my @person = ( qw / Freddy Mary Georgetta Loretta Fred Lawrence / ); ## ## UNBEARABLY LAME C ## for ( my $index = 0 ; $index < @person ; $index ++ ) { print "unbearably bad $person[$index]\n"; } ## ## MERELY BAD PERL ## for my $index ( 0 .. $#person ) { print "merely bad $person[$index]\n"; } ## ## GETTING INTO THE PERL STATE OF MIND ## for my $person (@person) { print "Hello $person\n"; } Note that of the three techniques, the last is the only one that will work for all values of $[ (of course, anyone who sets $[ to any nonzero value deserves hot pokers in the eyes.) -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- Lawrence Statton - [EMAIL PROTECTED] s/aba/c/g Computer software consists of only two components: ones and zeros, in roughly equal proportions. All that is required is to sort them into the correct order. -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] <http://learn.perl.org/> <http://learn.perl.org/first-response>