Passing a list as an arg to a subroutine

M

Mark Drummond

Hi all. I've been using Perl for many years now, but I am a "use it and
learn it as you need it" type. I having some trouble passing a list to
the "search" subroutine from Net::LDAP.

I am trying to pass a list of attributes to be returned by search. The
basic method call is:

my $searchresults = $ldap->search(OPTIONS)

One of the options is "attrs =>" which the documentation describes as "A
list of attributes to be returned for each entry that matches the search
filter.".

I am able to do something like this no problem:

my $searchresults = $ldap->search (
base => "$searchbase",
filter => "$searchfilter",
attrs => [ 'uid', 'cn' ];
)

That works just fine.

But what I now want to do is provide the list of attributes to be
returned on the command line much like the way ldapsearch works. @ARGV
is the list of attributes to be returned. I am not sure how to pass
@ARGV to search. I've tried just passing the array, references to the
array, but nothing is working for me. The search completes, but, looking
at the directory logs, the search is requesting ALL attributes rather
than just the ones I want.

my $searchresults = $ldap->search (
base => "$searchbase",
filter => "$searchfilter",
attrs => @ARGV;
)

my $searchresults = $ldap->search (
base => "$searchbase",
filter => "$searchfilter",
attrs => \@ARGV;
)

I am sure I am just using a ref when I shouldn't be, or not using a ref
when I should, or simply referencing the array incorrectly but I am not
sure which one it is!

I actually have the same problem if I try to define the attributes
outside the subroutine call. e.g., if I do this:

my $attrs = [ 'cn', 'uid' ];
my $searchresults = $ldap->search (
base => "$searchbase",
filter => "$searchfilter",
attrs => $attrs;
)

That is not working for me either. Something is broken in my understanding.

Thanks,

Mark
 
M

Mark Drummond

Cancel that, finally figured out what I was doing wrong. I was trying to
pass

"\@ARGV"

rather than

\ARGV

I was tripping over the "\" which of course has special meaning inside
the double quotes!

Mark
 
T

Thomas Wasell

Cancel that, finally figured out what I was doing wrong. I was trying to
pass

"\@ARGV"

rather than

\ARGV

I was tripping over the "\" which of course has special meaning inside
the double quotes!

And that's why you should ceck out

perldoc -q quoting
What's wrong with always quoting "$vars"?
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,764
Messages
2,569,566
Members
45,041
Latest member
RomeoFarnh

Latest Threads

Top