[Koha] Installing 1.3.3 on Red Hat 8.0

Christopher Hicks chicks at chicks.net
Wed Feb 5 06:40:21 NZDT 2003


On Mon, 3 Feb 2003, Paul Gear wrote:
> paul POULAIN wrote:
> > Paul Gear a écrit:
> >>    Premature end of script headers: z3950servers.pl, referer:
> >> http://enoch.gear.dyndns.org:82/cgi-bin/koha/admin-home.pl
> >>    Bareword "C4Connect" not allowed while "strict subs" in use at
> >> /opt/koha/intranet/cgi-bin/admin/z3950servers.pl line 176., referer:
> >> http://enoch.gear.dyndns.org:82/cgi-bin/koha/admin-home.pl
> >>    Bareword "C4Connect" not allowed while "strict subs" in use at
> >> /opt/koha/intranet/cgi-bin/admin/z3950servers.pl line 245., referer:
> >> http://enoch.gear.dyndns.org:82/cgi-bin/koha/admin-home.pl
> >>    * Changing the C4Connect bareword to &C4Connect in admin-home.pl
> >> fixed this.
> >>
> > Could some perl-geek explain this one ?
> 
> I'm half a perl geek...  The syntax used is perl 4 (?) style and is no
> longer supported under 5.8.

(1) The &funcname syntax is supported in perl 5.8.  I just checked the 
perldelta for 5.8 and in fact, the use of &funcname is exhibited several 
times.  And for more proof:

	[chicks at chicks]$ perl -e 'sub x { print "hi\n"; } &x;'
	hi
	[chicks at chicks]$ perl -v

	This is perl, v5.8.0 built for i386-linux-thread-multi

(2) the 'Bareword "C4Connect" not allowed while "strict subs"' error is 
explained as:

       Bareword "%s" not allowed while "strict subs" in use
           (F) With "strict subs" in use, a bareword is only allowed as a 
           subroutine identifier, in curly brackets or to the left of the 
           "=>" symbol.

Putting the & in front or () behind the seeming barewood solves the
problem generally.  & is the more vintage way to do things and is
necessary if perl4 compatibality is an issue.  Putting ()  aftewards tends
look more current.  The difference between prepending & or appending () in
this case is not merely aesthetic:

$ perl -e 'sub doh { print "... at _...\n"; } sub bah { doh(); } bah( qw(x y z a b c));'
......
$ perl -e 'sub doh { print "... at _...\n"; } sub bah { doh; } bah( qw(x y z a b c));'
......
$ perl -e 'sub doh { print "... at _...\n"; } sub bah { &doh; } bah( qw(x y z a b c));'
...x y z a b c...

The pre-& call to doh passes the arguments along, while the other two 
forms don't.

Underlying this problem is that "C4Connect" isn't being pre-declared 
properly.  (That's the other way this problem is avoided.)  To show 
another one-liner:

	[chicks at chicks]$ perl -e 'sub lala { print "lala\n"; } lala;'
	lala

So, even in perl 5.8 the bareword is recognized as a subroutine call if 
it's been pre-declared.  

[this sat in my outbox since yesterday.  sorry.]

-- 
</chris>

"Never offend people with style when you can offend them with substance."
		- Sam Brown 





More information about the Koha mailing list