Passing a variable to a package function vs. a local function

Ask a Question related to PERL Beginners, Design and Development.

  1. #1

    Default Passing a variable to a package function vs. a local function

    I'm a bit new to this so please bear with me...

    I've written a script that uses CGI.pm something like this:

    use CGI::Carp qw(fatalsToBrowser);
    use CGI qw(:all);

    $query = new CGI;

    .....blah...blah...
    &myfunc($query);
    .....blah...blah...

    sub myfunc{ my ($query) = @_;
    $foo=$query->param("foo");
    ...more...blah...blah...
    }

    Everything works fine as is, but I'm trying to take the function "myfunc"
    out and put it in a separate .pm file because I need to call it from several
    cgi scripts. When I put it in the .pm file, I get something like:

    Can't locate object method "param" via package "Trend" at
    /usr/local/lib/perl5/site_perl/5.005/MMC/Dex.pm line 253, <INFILE> chunk
    1150.

    I do have:
    use CGI::Carp qw(fatalsToBrowser);
    use CGI qw(:all);
    In the .pm file

    What am I missing?

    Thanks,
    -Dan

    Dan Fish Guest

  2. Similar Questions and Discussions

    1. Passing a ROWTYPE to a function
      I'm trying to write a function that takes a %ROWTYPE as an argument. I'm just not sure how to call it from another function. This is what I tried:...
    2. Passing db values to function
      Hello, I am creating dynamic images with corresponding checkboxes by pulling data from an Access database. The onchange event of the checkboxes...
    3. passing a function as a ref?
      can you pass a reference to a function, then call it? How do I do it? The following does not work: function aaa(myFunc){ eval(myFunc); }...
    4. Passing a hash to a function
      I can't seem to find in in my perl book. I'd like to pass hashes to functions #!/usr/bin/perl -wT my %someHash; $someHash{'one'} = "1";...
    5. Passing 'this' to a function
      I would like to create a class that changes some basic attributes of a web page based on values in a database. Things like background color, font,...
  3. #2

    Default Re: Passing a variable to a package function vs. a local function

    Dan Fish wrote:
    > I'm a bit new to this so please bear with me...
    >
    > I've written a script that uses CGI.pm something like this:
    >
    > use CGI::Carp qw(fatalsToBrowser);
    > use CGI qw(:all);
    >
    > $query = new CGI;
    >
    > ....blah...blah...
    > &myfunc($query);
    > ....blah...blah...
    >
    > sub myfunc{ my ($query) = @_;
    > $foo=$query->param("foo");
    > ...more...blah...blah...
    > }
    >
    > Everything works fine as is, but I'm trying to take the function "myfunc"
    > out and put it in a separate .pm file because I need to call it from several
    > cgi scripts. When I put it in the .pm file, I get something like:
    >
    > Can't locate object method "param" via package "Trend" at
    > /usr/local/lib/perl5/site_perl/5.005/MMC/Dex.pm line 253, <INFILE> chunk
    > 1150.
    >
    > I do have:
    > use CGI::Carp qw(fatalsToBrowser);
    > use CGI qw(:all);
    > In the .pm file
    >
    > What am I missing?
    >
    > Thanks,
    > -Dan
    >
    If you have name the package file as say Mypackage.pm
    then in your mail program you will call the function as
    Mypackage::myfunc($query).

    Ram



    Ramprasad A Padmanabhan Guest

  4. #3

    Default Re: Passing a variable to a package function vs. a local function

    On Sun, Sep 28, 2003 at 11:48:19PM -0700, Dan Fish wrote:
    > sub myfunc{ my ($query) = @_;
    > $foo=$query->param("foo");
    > ...more...blah...blah...
    > }
    >
    > Everything works fine as is, but I'm trying to take the function "myfunc"
    > out and put it in a separate .pm file because I need to call it from several
    > cgi scripts. When I put it in the .pm file, I get something like:
    >
    > Can't locate object method "param" via package "Trend" at
    > /usr/local/lib/perl5/site_perl/5.005/MMC/Dex.pm line 253, <INFILE> chunk
    > 1150.
    Either use the pure subroutine call instead of the method call.

    Trend::myfunc( $query );

    Or use the method call, and know that the first argument will
    be the class/object on which the method was invoked.

    package Trend;
    sub myfunc {
    my ($package, $query) = @_;
    ...
    }

    package main;
    Trend->myfunc( $query );

    --
    Steve
    Steve Grazzini Guest

Posting Permissions

  • You may not post new threads
  • You may post replies
  • You may not post attachments
  • You may not edit your posts

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139