(Aris Xanthos) wrote in message news:<. com>...
> Hi,
>
> I have a problem with the order of subroutines
> and I couldn't find help about that in books or
> online.
>
> Could someone tell me why this code works fine:
>
> ------------------
> #!/usr/bin/perl
>
> Function1();
>
> sub Function1() {
> Function2( 'arg' );
> }
>
> sub Function2() {
> my ( $arg ) = @_;
> }
>
> ------------------
>
> and not this one:
>
> ------------------
> #!/usr/bin/perl
>
> Function1();
>
> sub Function2() {
> my ( $arg ) = @_;
> }
>
> sub Function1() {
> Function2( 'arg' );
> }
>
> ------------------
>
> which yields the following error message:
>
> Too many arguments for main::Function2 at
> D:\Developpement\Perl\test.pl line 10, near "'arg' )"
> Execution of D:\Developpement\Perl\test.pl
> aborted due to compilation errors.
>
> I have this problem in the framework of a rather
> long (tk) script (about 2'000 lines so far), and the
> calls to various subroutines are getting too intricate
> for me to find an order that works (besides, it is not
> a satisfying solution).
>
> I hope this does not duplicate a previous post.
>
> Aris Xanthos
You probably don't realise that you are defining a prototype for
Function2, i.e.
sub Function2() {
....
says that the function should expect no parameters. Leave the () off
and it will be unprototyped.
The reason the first example works OK is that the prototype for
Function2 has not been compiled at the time that Function1 is
compiled.