From 002b978b598c42691928a27566ef8edaaeaa8696 Mon Sep 17 00:00:00 2001 From: Robin Houston Date: Thu, 5 Apr 2001 15:27:38 +0100 Subject: print control-character vars readably Message-ID: <20010405142738.A15855@puffinry.freeserve.co.uk> Needs EBCDICification. p4raw-id: //depot/perl@9564 --- ext/B/B.pm | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'ext/B/B.pm') diff --git a/ext/B/B.pm b/ext/B/B.pm index ad8699f803..6c2f013da6 100644 --- a/ext/B/B.pm +++ b/ext/B/B.pm @@ -60,6 +60,12 @@ use strict; package B::OBJECT; } +sub B::GV::SAFENAME { + my $name = (shift())->NAME; + $name =~ s/^([\cA-\cZ])/"^".chr(64 + ord($1))/e; + return $name; +} + my $debug; my $op_count = 0; my @parents = (); @@ -449,6 +455,21 @@ This method returns TRUE if the GP field of the GV is NULL. =item NAME +=item SAFENAME + +This method returns the name of the glob, but if the first +character of the name is a control character, then it converts +it to ^X first, so that *^G would return "^G" rather than "\cG". + +It's useful if you want to print out the name of a variable. +If you restrict yourself to globs which exist at compile-time +then the result ought to be unambiguous, because code like +C<${"^G"} = 1> is compiled as two ops - a constant string and +a dereference (rv2gv) - so that the glob is created at runtime. + +If you're working with globs at runtime, and need to disambiguate +*^G from *{"^G"}, then you should use the raw NAME method. + =item STASH =item SV -- cgit v1.2.1