in reply to making a library

You have not created an OBJECT.

"Foo1" is a module/package/class (depending on how you want to look at it), but it is NOT an object (at least in the OO perl sense).

If you want to call bar without creating and object, call the class method:

Foo1::bar();
If you want to create an object, since you do not have a "new" method, you can try (untested):
my $obj = bless {},"Foo1"; $obj->bar(); # Calling an instance method. # this passes DIFFERENT parameters than the class method, + above.

     Syntactic sugar causes cancer of the semicolon.        --Alan Perlis

Replies are listed 'Best First'.
Re^2: making a library
by adieu (Initiate) on Mar 08, 2011 at 09:10 UTC
    Hi, I tried using your method :
    Foo1::bar();
    but it shows error "undefined subroutine &Foo1::bar()called"
      Looks like you did not "use Foo1;" before attempting to call the class method.

      Here is pared-down working code: First, the Foo1.pm file

      package Foo1; use strict; sub bar { print "Hello (FIRST Param=$_[0]) (Second-param=$_[1])\n"; } 1;
      Now the code to call Foo1:
      use strict; use warnings; use Foo1; my $obj = bless {},"Foo1"; $obj->bar( "Instance Method"); # Calling an instance method. # this passes DIFFERENT parameters than the class method. Foo1::bar("Class Method call"); Foo1->bar("Pseudo-method call");
      Results:
      Hello (FIRST Param=Foo1=HASH(0xa165818)) (Second-param=Instance Method +) Hello (FIRST Param=Class Method call) (Second-param=) Hello (FIRST Param=Foo1) (Second-param=Pseudo-method call)

           Syntactic sugar causes cancer of the semicolon.        --Alan Perlis