On Tue, Apr 17, 2012 at 9:43 AM, Gary Stainburn <gary.stainb...@ringways.co.uk> wrote: > On Tuesday 17 April 2012 13:30:59 Manfred Lotz wrote: >> >> One example is this: >> >> #! /usr/bin/perl >> >> use strict; >> use warnings; >> >> mysub; >> >> sub mysub { >> print "Hi there\n"; >> } >> >> If you run this you get an error: >> Bareword "mysub" not allowed while "strict subs" in use at ./testsub.pl >> line 6. Execution of ./testsub.pl aborted due to compilation errors. >> >> >> Perl tells you that it has no idea what you mean when you use the >> bareword mysub. >> >> >> Now you have two options to solve it. >> >> 1. &mysub; >> >> Using the sigil & you tell Perl that mysub is a subroutine. >> >> 2. mysub(); >> >> Usind () after mysub you also tell Perl that mysub is a subroutine. >> >> >> 3. &mysub(); >> >> Combining 1. and 2. works also but is not recommended. Hmm, at least I >> do no recommend it. >> >> >> Use 2. and you'll be happy. >> >> >> There are surely some other situations where using & might be >> appropriate. But this one came into my mind immediately. >>Hi Manfred, > > Thank you for this, but below is what I am meaning. > > Gary > > [root@stan ~]# cat t.pl > #!/usr/bin/perl -w > > use strict; > use warnings; > > > mysub(); > > > sub mysub() { > print "hello world\n"; > } > [root@stan ~]# ./t.pl > main::mysub() called too early to check prototype at ./t.pl line 7. > hello world > > } > > -- > Gary Stainburn > Group I.T. Manager > Ringways Garages > http://www.ringways.co.uk >
You are forcing the procedure mysub to use a prototype by including the empty parameter list. You usually do not want to use prototypes. Just define mysub without a prototype: sub mysub { print "hello world\n"; } HTH, Ken -- To unsubscribe, e-mail: beginners-unsubscr...@perl.org For additional commands, e-mail: beginners-h...@perl.org http://learn.perl.org/