in reply to Re (tilly) 2: Calling subroutine in a package from other perl sub.
in thread Calling subroutine in a package from other perl sub.
I never quite understood why this is considered dangerous style. This is the old style of calling subroutines. If you do not predeclare you subs then you either have to &sub or sub() to not get a bareword error with use strict
When you call a subroutine like &sub I understand that you are passing the value of @_ to the sub or the equivalent of sub(@_). If you call sub(), you instead are passing a null list. But exactly how is passing @_ dangerous if the sub is not using any passed variables?
I think not knowing the following is more dangerous.
Output:#!/usr/bin/perl -w use strict; my @test = ("one","two","three"); my $x = "one"; my $y = "two"; my $z = "three"; test1($x,$y,$z); print "$x\n$y\n$z\n\n"; test2($x,$y,$z); print "$x\n$y\n$z\n"; test1(@test); print join "\n", @test, "\n"; test2(@test); print join "\n", @test, "\n"; sub test1 { my $x1 = shift; my $y1 = shift; my $z1 = shift; $_[0] = "test1: 1"; $_[1] = "test1: 2"; $_[2] = "test1: 3"; } sub test2 { my ($x2,$y2,$z2) = @_; $_[0] = "test2: 1"; $_[1] = "test2: 2"; $_[2] = "test2: 3"; }
one two three test2: 1 test2: 2 test2: 3 one two three test2: 1 test2: 2 test2: 3
Someone mind explaining this? In more detail than " '@_' is a local array, but its elements are aliases for the actual scalar paramters." What really gets me is how useing shift changes the behavior! Why?
zzSPECTREz
|
---|
Replies are listed 'Best First'. | |
---|---|
Re (tilly) 4: Calling subroutine in a package from other perl sub.
by tilly (Archbishop) on Jan 17, 2001 at 07:48 UTC | |
by zzspectrez (Hermit) on Jan 17, 2001 at 11:33 UTC | |
by tilly (Archbishop) on Jan 17, 2001 at 17:20 UTC | |
(tye)Re: Calling subroutine in a package from other perl sub.
by tye (Sage) on Jan 17, 2001 at 10:11 UTC | |
by zzspectrez (Hermit) on Jan 17, 2001 at 11:20 UTC | |
by tye (Sage) on Jan 17, 2001 at 22:19 UTC |