Dermot wrote:
2009/7/28 John W. Krahn <jwkr...@shaw.ca>:
Thanx for gettig back to me.
Which error? Copy and paste the error message you are receiving.
Opps sorry. Here you are. Every time I start the httpd I get
Processing config file: /etc/apache-modperl/conf.d/dev_vhost.conf
Subroutine addItemsToBasket redefined at
/export/web/lib/MyApp/Basket.pm line 347, <DATA> line 238.
Subroutine addItemToBasket redefined at
/export/web/lib/MyApp/Basket.pm line 355, <DATA> line 238.
That message means that you have defined two addItemsToBasket
subroutines and also two addItemToBasket subroutines in the current package.
You could be importing a module before MyApp::Basket that has these
subroutines or they could be defined in the main package.
Why are you reading from your program file while importing modules?
This offending code reads a like this:
package Some::Pack;
..
..
sub addItemsToBasket {
my ($bid, $items) = @_;
foreach my $i (@items) {
Is @items global? Because you are not declaring it in lexical scope.
Another opps, that's a typo sorry. It should read
foreach my $i ( @{$items} ) {
addItemToBasket($bid, $i);
}
}
sub addItemToBasket {
my ($bid, $item) = @_;
...
...
# do some work that adds item
}
That is very confusing. Why do you have two subroutines with almost
identical names and almost identical functionality?
Yes, in my defence, I found it this way. That's why I am nervous of
removing one or the other. The singular function (addItemToBasket)
expects a single scalar argument in $item. The plural
(addItemsToBasket) expects an arrayref in $item. It loops through and
passes the basket_id ($bid) and the item ($i) to the singular
function.
addItems expects an array ref, addItem expects a scalar. I'm sure it's
possible to merge the 2 subroutines with the use of `wantarray`
wantarray() is used for the return value of a subroutine, not for the
arguments a subroutine accepts.
I see.
or `ref` to see what the 2nd argument is.
Why not just pass a scalar and a list?
Because there is a lot of code and I won't know, until it throws an
error, if there is existing code that passes scalar directly to the
singular function. I'm just worried that I break some existing
functions.
How about something like this:
sub addItemsToBasket {
my $bid = shift;
my $items = ref $_[0] ? $_[0] : \...@_;
John
--
Those people who think they know everything are a great
annoyance to those of us who do. -- Isaac Asimov
--
To unsubscribe, e-mail: beginners-unsubscr...@perl.org
For additional commands, e-mail: beginners-h...@perl.org
http://learn.perl.org/