B::Utils::OP(3)

✨ NAME ✨

okay bestie, welcome to the B::Utils::OP(3) page from the User Contributed Perl Documentation 🫢 It's all about op related utility functions for perl β€” like, the optree side of Perl, and yes it's iconic πŸ’…

πŸŽ€ VERSION πŸŽ€

version 0.27, periodt ✨

πŸ¦‹ SYNOPSIS πŸ¦‹

okay so here's the little starter pack:

use B::Utils::OP qw(parent_op return_op);
sub foo {
  my $pop = parent_op(0);
  my $rop = return_op(0);
}

🌸 DESCRIPTION 🌸

so picture this sub:

sub foo {
  dothis(1);
  find_things();
  return;
}

it has the following optree:

d  <1> leavesub[1 ref] K/REFC,1 ->(end)
-     <@> lineseq KP ->d
1        <;> nextstate(main -371 bah.pl:8) v/2 ->2
5        <1> entersub[t2] vKS/TARG,3 ->6
-           <1> ex-list K ->5
2              <0> pushmark s ->3
3              <$> const[IV 1] sM ->4
-              <1> ex-rv2cv sK/3 ->-
4                 <#> gv[*dothis] s ->5
6        <;> nextstate(main -371 bah.pl:9) v/2 ->7

9        <1> entersub[t4] vKS/TARG,3 ->a
-           <1> ex-list K ->9
7              <0> pushmark s ->8
-              <1> ex-rv2cv sK/3 ->-
8                 <#> gv[*find_things] s/EARLYCV ->9

a        <;> nextstate(main -371 bah.pl:10) v/2 ->b
c        <@> return K ->d
b           <0> pushmark s ->c

The find_things in foo is called in the entersub in #9. If you call the parent_op function with level 0, you get the nextstate op that is before the entersub, which is #6. And return_op gives you the next op that the caller is returning to β€” in this case, the nextstate in #a. 🫢

✨ EXPORTED PERL FUNCTIONS ✨

  • parent_op($lv) β€” in runtime, returns the B::OP object whose next is the entersub of the current context up level $lv πŸ’–
  • return_op($lv) β€” in runtime, returns the B::OP object that the current context is returning to at level $lv πŸŽ€

πŸŽ€ B::CV METHODS πŸŽ€

  • $cv->NEW_with_start($root, $start) β€” clone the $cv but with different $root and $start 🌸

πŸ‘‘ AUTHORS πŸ‘‘

Chia-liang Kao <clkao@clkao.org> πŸ’Œ

Copyright 2008 by Chia-liang Kao.

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

See <http://www.perl.com/perl/misc/Artistic.html>.


xoxo, this page is perl v5.42.0, dated 2024-03-04, and it's still B::Utils::OP(3) β€” slay and goodbye bestie πŸ’…βœ¨

πŸ“¦ where this page comes from