Timo,
Noted!...However, one could work that into his code.
<CODE>
#!/usr/bin/perl -wl
use strict;
my @voo = ("boon", 12, "man"); # note this 3 elements array
die "Must be even elements" if @voo % 2;
my %coo = @voo;
while(my ($key, $val) = each %coo){
$line.="$key => $val\n";
}
print $line;
Emeka
On Sat, Jul 30, 2011 at 3:09 PM, timothy adigun <[email protected]> wrote:
> Emeka,
> Yes in a way, but the point am making here is that
> one can also pass hash into a subroutine. Context is everything in Perl!
> Caution has to be taken however when converting array into hash. Hash
> elements must be even in number, whereas odd numbers of elements could be in
> array, one is passing to the hash, thereby an generating error!
>
> <CODE>
> #!/usr/bin/perl -wl
> use strict;
>
> my @voo = ("boon", 12, "man"); # note this 3 elements array
> my %coo = @voo;
>
> my $line = "";
> while(my ($key, $val) = each %coo){
> $line.="$key => $val\n";
> }
> print $line; # Oops Error
>
>
>
>
>
> On Sat, Jul 30, 2011 at 8:34 AM, Emeka <[email protected]> wrote:
>
>>
>> Timo,
>>
>> One can even pass hash to a subroutine with a little trick, 'cos the
>> default
>> argument of a subroutine is an array "@_". ** Check Example 2, in the code
>> below.
>>
>> I think this trick is formalized by context rule.
>>
>> @voo = ("boon", 12, "man", 88);
>> %coo = @voo;
>> my $line = "";
>> while(my ($key, $val) = each %coo){
>> $line.="$key => $val\n";
>> }
>> print $line;
>>
>> On Sat, Jul 30, 2011 at 2:17 AM, timothy adigun <[email protected]>wrote:
>>
>>> Hi Rajeev,
>>> with the link you provided, the statement "In Perl, you can pass only
>>> one
>>> kind of argument to a subroutine: a scalar... a pointer (sort of)." was
>>> made
>>> Reference sub-topic. So, it will not be a total truth that one can pass
>>> "only" one kind of argument to subroutine.
>>> Generally in perl the subroutrine default argument is an array "@_", so
>>> that
>>> makes it possible to even pass arrays into subroutine! ** Check Example
>>> 1,
>>> in the code below.
>>> One can even pass hash to a subroutine with a little trick, 'cos the
>>> default
>>> argument of a subroutine is an array "@_". ** Check Example 2, in the
>>> code
>>> below.
>>> Finally, I believe that "one" the main purpose of reference in perl is to
>>> help maintain the integrity of data passed to a subroutine.
>>> In Code Example 3 below, two arrays were passed to a sub., inside the
>>> sub.
>>> the two array merges to one, and lost identity, then printer with just
>>> one
>>> for loop.
>>> But one can keep these array intact, using reference as demonstrated in
>>> **
>>> Code Example 4!
>>> To write Object oriented perl one might have to know reference well!
>>> Really
>>> it like pointer or passing reference using pointer in c++.
>>>
>>> <CODES>
>>>
>>> #!/usr/bin/perl -w
>>> use strict;
>>>
>>> ##Example 1#################
>>>
>>> sub getter(@); #declaration of subroutine
>>>
>>> my $list="";
>>> my @arr=qw( 12 timo kunle 067 23.90 come_hm);
>>>
>>> sub getter(@){ # defination of subroutine
>>> foreach(@_){
>>> $list.="$_\n";
>>> }return $list;
>>> }
>>>
>>> print getter(@arr); # print return value
>>>
>>> ##################################################################
>>> ##Example 2#################
>>>
>>> my %hash=( fistname=>'larry', surname=>'wall',
>>> street=>'earth', value =>'perl');
>>>
>>> my $line="";
>>> sub getter_hash{
>>> my %hash=@_; # the trick convert ur @_ to %hash
>>> while(my ($key,$val)=each %hash){
>>> $line.="$key => $val\n";
>>> }
>>> return $line;
>>> }
>>>
>>> print getter_hash(%hash);
>>>
>>> ###################################################################
>>> ##Example 3#################
>>>
>>> sub getter3(@); #declaration of subroutine
>>>
>>> $list="";
>>> my @arr1=qw( 12 timo kunle 067 23.90 come_hm);
>>> my @arr2=qw( US 23:46:13 local float GOP_DEBT -q34A);
>>>
>>> sub getter3(@){ # defination of subroutine
>>> foreach(@_){
>>> $list.="$_\n";
>>> }return $list;
>>> }
>>>
>>> print getter(@arr1,@arr2); # print return value
>>>
>>> #################################################################
>>> ##Example 4#################
>>>
>>> sub getter4($$); #declaration of subroutine
>>>
>>> my $count=0;
>>> my @arr3=qw( 12 timo kunle 067 23.90 come_hm);
>>> my @arr4=qw( US 23:46:13 local float GOP_DEBT -q34A);
>>>
>>> sub getter4($$){ # defination of subroutine
>>> my ($val1,$val2)=@_;
>>> foreach(@{$val1}){++$count;
>>> print "$count:$_\n";
>>> } $count=0;
>>> foreach(@{$val2}){++$count;
>>> print "$count:$_\n";
>>> }
>>> }
>>> getter4(\@arr3,\@arr4); # print return value
>>>
>>> Regards.
>>>
>>>
>>>
>>>
>>> On Fri, Jul 29, 2011 at 11:57 PM, Rajeev Prasad <[email protected]>
>>> wrote:
>>>
>>> > Hello,
>>> >
>>> > from here:
>>> http://www.troubleshooters.com/codecorn/littperl/perlsub.htm
>>> >
>>> > i found:
>>> >
>>> > In Perl, you can pass only one kind of argument to a subroutine: a
>>> scalar.
>>> > To pass any other kind of argument, you need to convert it to a scalar.
>>> You
>>> > do that by passing a reference to it. A reference to anything is a
>>> > scalar. If you're a C programmer you can think of a reference as a
>>> pointer
>>> > (sort of).
>>> >
>>> > is that still true? date on website is 2003...
>>> >
>>> > thank you.
>>> >
>>> > Rajeev
>>> >
>>>
>>
>>
>>
>> --
>> *Satajanus Nig. Ltd
>>
>>
>> *
>>
>
>
--
*Satajanus Nig. Ltd
*