On 05/21/2018 11:21 PM, Siavash wrote:

https://www.nntp.perl.org/group/perl.perl6.users/2017/03/msg3423.html

On 2018-05-22 06:04:47 GMT, ToddAndMargo wrote:
Hi All,

I need to know the name of the subroutine I am in.

This is the way I use to do it in Perl 5:

          (my $Name = (caller(0))[3] ) ~~ s{.*::}{};

How do I do it in Perl 6?

Many thanks,
-T

Hi Siavash,

Oh now this is embarrassing.  That was me!  And I
have a keeper file on it too.

Wait, why am I wring you again? Is Sparky still
in the navy?  Is Teddy still president?  You kids
get off my lawn !!!  I hate when this happens.
I have a lawn?

:'(

-T

My newly rediscovered notes:


Perl 6:
   what is my program's name?
   what is my sub's name?

<code WhoTest.pl6>
#!/usr/bin/perl6

sub Test () {

   my $f = $?FILE; say "   \$\?FILE=<$f>";
   my $g = $?FILE.IO.basename;  say "   \$\?FILE.IO.basename=<$g>";
   ( my $IAm = $?FILE ) ~~ s|.*"/"||; say "   Regex: \$IAm=<$IAm>\n";


   # sub Test () { #`(Sub|58588296) ... }
   my $h = &?ROUTINE.gist;
   say "   \&\?ROUTINE.gist=<$h>";
   $h ~~ m/' '(.*?)' '\(/;
   say "   Regex: This sub\'s name is <$0>";

   &?ROUTINE.gist ~~ m/' '(.*?)' '\(/; say "   A more compact way =<$0>;"
}


Test();
</code>
abc


<code WhoIsMySub.pl6>
#!/usr/bin/env perl6

sub f() { put &?ROUTINE.gist; };

sub abc () {
    say "This subroutine's ID is ", f;
    print "\n";

    &?ROUTINE.gist ~~ m/' '(.*?)' '\(/;
    my $SubName = $0;
    say "This subroutine is called $SubName";
}
</code>



$ WhoTest.pl6
   $?FILE=</home/linuxutil/./WhoTest.pl6>
   $?FILE.IO.basename=<WhoTest.pl6>
   Regex: $IAm=<WhoTest.pl6>

   &?ROUTINE.gist=<sub Test () { #`(Sub|72467224) ... }>
   Regex: This sub's name is <Test>

   A more compact way =<Test>;

Gist reference:
https://docs.perl6.org/routine/gist#class_Mu

Reply via email to