Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 7010549
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 27, 20262026-05-27T22:00:21+00:00 2026-05-27T22:00:21+00:00

Suppose we have a subroutine returning a reference sub aspirin { my @items =

  • 0

Suppose we have a subroutine returning a reference

sub aspirin {
    my @items = qw(some items in here);
    return \@items;
}

And another subroutine taking an array reference

sub beetroot (\@) {
    my $lst = shift;
    print "$_\n" for @$lst;
}

I want to get the array from aspirin and feed beetroot with it. I would like to do something like (approach A)

my $L = aspirin;
beetroot $L;

But the interpreter complains, and I need to do the following instead (approach B):

my $L = aspirin;
beetroot @$L;

So my questions are:

  • Why isn’t the approach A working? The argument is actually an Array reference, which is what we want;
  • Is a dereference without assignment (like the one in approach B) requiring the copy of the whole list content? (I guess not, since there’s no explicit copy).

Thanks for your answers

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-27T22:00:22+00:00Added an answer on May 27, 2026 at 10:00 pm

    Perl prototypes exist to modify the behaviour of the parser, which is rarely needed. This is no exception.

    If “beetroot” doesn’t have any other arguments then you should just use @_ instead of an array reference.

    sub aspirin {
        my @items = qw'some items in here';
        return @items if wantarray; # return a list in list context
        return \@items;
    }
    
    sub beetroot {
        print "$_\n" for @_;
    }
    
    my $L = aspirin;
    beetroot @$L;
    
    # the follow examples require the version of aspirin from this answer
    
    my @L = aspirin;
    beetroot @L;
    
    beetroot aspirin; # aspirin called in list context
    

    This will have the added benefit that you don’t have to work around the parser if you just want to input a list of elements.

    This works on the new version, but not the version in the question.

    beetroot qw'some items in here';
    beetroot aspirin; # aspirin called in list context
    

    To get it to work with the one in the question, you have to create an anonymous array. Interesting enough, this also works with the version in this answer.

    beetroot @{ [qw'some items in here'] };
    # the follow examples use the version of aspirin from this answer
    beetroot @{ [aspirin] };
    beetroot @{ scalar aspirin };
    beetroot @{ aspirin };
    

    If you really want “beetroot” to work with array references.
    I would write it this way.

    sub beetroot{
      my($lst) = @_; # similar to my $lst = shift
      print "$_\n" for @$lst;
    }
    
    my $L = aspirin;
    beetroot $L;
    
    my @L = aspirin; # using the aspirin from this answer
    beetroot \@L;
    
    beetroot [qw'some items in here'];
    # the follow examples use the version of aspirin from this answer
    beetroot scalar aspirin; # force aspirin to return an array reference
    beetroot [ aspirin ]; # copy the array
    

    I would only write it this way if you want to use references to reduce the memory footprint of Perl, or you have other inputs to “beetroot“.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

Suppose you have 2 different ASP.NET applications in IIS. Also, you have some ASCX
suppose we have this next sample code: while(some condition){ lock1.lock(); . . } the
Suppose I have a module which defines some basic constants such as integer, parameter
Suppose I have a class that looks like this: class Derived : // some
Suppose I have a collection with some set of documents. something like this. {
Suppose I have a stringbuilder in C# that does this: StringBuilder sb = new
Suppose we have a table A: itemid mark 1 5 2 3 and table
Suppose I have the following CSS rule in my page: body { font-family: Calibri,
Suppose I have a class module clsMyClass with an object as a member variable.
Suppose I have: Toby Tiny Tory Tily Is there an algorithm that can easily

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.