http://qs321.pair.com?node_id=1011850


in reply to How can I see a CPAN module's print message

If this code is in a package called "TieRegistry", you will not see the output from print statements outside of any methods (subroutines) in that module just by typing "use TieRegistry"

If the print statements are in a subroutine in the package TieRegistry:

package TieRegistry; use strict; use Carp; sub new { my $class = shift; my $self = bless {}, $class; } sub PrintThis { print "my print message\n"; }

And then in your main program, after "use TieRegistry", you had:

my $test = TieRegistry->new; $test->PrintThis;

The line "my print message" would print.

Replies are listed 'Best First'.
Re^2: How can I see a CPAN module's print message
by anaconda_wly (Scribe) on Jan 06, 2013 at 09:06 UTC
    But why? As I can do it like this: MyPackage.pm
    use strict; use warnings; { package MyPackage; use Carp; carp "print message"; } 1;
    main.pl
    use MyPackage; &main; sub main { }

      Also consider that Perl will load the first file TieRegistry.pm it finds in @INC. Inspect the values of %INC to find out which file Perl loaded, and which one you edited. See perlvar and Data::Dumper.

      use TieRegistry; print Dumper \%INC;

      That line will print because it's not in a sub. A line inside a sub can only print when that sub is actually executed.

      (The exception to this rule being a line that is evaluated at compile time. But it would be unusual to do this.)

      perl -E'sub Monkey::do{say$_,for@_,do{($monkey=[caller(0)]->[3])=~s{::}{ }and$monkey}}"Monkey say"->Monkey::do'
        Yes, so my print or carp in file scope(I mean not in any sub) should print the message if I "use" it I think.