This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Document if.pm in perlfunc
authorZefram <zefram@fysh.org>
Mon, 30 Nov 2009 10:42:14 +0000 (11:42 +0100)
committerRafael Garcia-Suarez <rgs@consttype.org>
Mon, 30 Nov 2009 10:42:14 +0000 (11:42 +0100)
pod/perlfunc.pod

index 540b723..188647c 100644 (file)
@@ -7060,6 +7060,15 @@ block scope (like C<strict> or C<integer>, unlike ordinary modules,
 which import symbols into the current package (which are effective
 through the end of the file).
 
+Because C<use> takes effect at compile time, it doesn't respect the
+ordinary flow control of the code being compiled.  In particular, putting
+a C<use> inside the false branch of a conditional doesn't prevent it
+from being processed.  If a module or pragma needs to be loaded only
+conditionally, this can be done using the L<if> pragma:
+
+    use if $] < 5.008, "utf8";
+    use if WANT_WARNINGS, warnings => qw(all);
+
 There's a corresponding C<no> command that unimports meanings imported
 by C<use>, i.e., it calls C<unimport Module LIST> instead of C<import>.
 It behaves exactly as C<import> does with respect to VERSION, an