From 995e581ff6cca225aeb40cfb47ff14993949344d Mon Sep 17 00:00:00 2001 From: Robin Houston Date: Tue, 8 May 2001 02:53:34 +0100 Subject: [PATCH] Document known bugs Message-ID: <20010508015334.A32394@penderel> p4raw-id: //depot/perl@10030 --- ext/B/B/Deparse.pm | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 69 insertions(+), 1 deletion(-) diff --git a/ext/B/B/Deparse.pm b/ext/B/B/Deparse.pm index ae4043b..6a51cb3 100644 --- a/ext/B/B/Deparse.pm +++ b/ext/B/B/Deparse.pm @@ -3841,6 +3841,9 @@ particular context, where some pragmas are already in scope. In this case, you use the B method to describe the assumptions you wish to make. +Not all of the options currently have any useful effect. See +L for more details. + The parameters it accepts are: =over 4 @@ -3933,7 +3936,72 @@ the main:: package, the code will include a package declaration. =head1 BUGS -See the 'to do' list at the beginning of the module file. +=over 4 + +=item * + +The only pragmas to be completely supported are: C, +C, C, and C. (C<$[>, which +behaves like a pragma, is also supported.) + +Excepting those listed above, we're currently unable to guarantee that +B::Deparse will produce a pragma at the correct point in the program. +Since the effects of pragmas are often lexically scoped, this can mean +that the pragma holds sway over a different portion of the program +than in the input file. + +=item * + +Lvalue method calls are not yet fully supported. (Ordinary lvalue +subroutine calls ought to be okay though.) + +=item * + +If you have a regex which is anything other than a literal of some +kind, B::Deparse will produce incorrect output. +e.g. C<$foo =~ give_me_a_regex()> will come back as +C<$foo =~ /give_me_a_regex()/> + +=item * + + m{ #foo + bar }x + +comes out as + + m/#foo\n bar/x) + +which isn't right. + +=item * + +If a keyword is over-ridden, and your program explicitly calls +the built-in version by using CORE::keyword, the output of B::Deparse +will not reflect this. + +=item * + +tr/// doesn't correctly handle wide characters + +=item * + +C comes out as C, which +causes perl to issue a warning. + +The obvious fix doesn't work, because these are different: + + print (FOO 1, 2, 3), 4, 5, 6; + print FOO (1, 2, 3), 4, 5, 6; + +=item * + +Constants (other than simple strings or numbers) don't work properly. +Examples that fail include: + + use constant E2BIG => ($!=7); + use constant x=>\$x; print x + +=back =head1 AUTHOR -- 2.7.4