Perl Cd Bookshelf [Electronic resources] نسخه متنی

اینجــــا یک کتابخانه دیجیتالی است

با بیش از 100000 منبع الکترونیکی رایگان به زبان فارسی ، عربی و انگلیسی

Perl Cd Bookshelf [Electronic resources] - نسخه متنی

| نمايش فراداده ، افزودن یک نقد و بررسی
افزودن به کتابخانه شخصی
ارسال به دوستان
جستجو در متن کتاب
بیشتر
تنظیمات قلم

فونت

اندازه قلم

+ - پیش فرض

حالت نمایش

روز نیمروز شب
جستجو در لغت نامه
بیشتر
لیست موضوعات
توضیحات
افزودن یادداشت جدید



10.16. Nesting Subroutines


10.16.1. Problem



You
want subroutines to nest, such that one subroutine is visible and
callable only from another. When you try the obvious approach of
nesting sub FOO
{ sub BAR
{ } ...
}, Perl gives warnings about variables that will
not stay shared.

10.16.2. Solution


Instead of making the inner functions normal subroutines, make them
closures and temporarily assign their references to the typeglob of
the right name to create a localized function.

10.16.3. Discussion


If you use nested subroutines in other programming languages with
their own private variables, you'll have to work at it a bit in Perl.
The intuitive coding of this kind of thing gives the warning "will
not stay shared." For example, this won't work:

sub outer {
my $x = $_[0] + 35;
sub inner { return $x * 19 } # WRONG
return $x + inner( );
}

The following is a workaround:

sub outer {
my $x = $_[0] + 35;
local *inner = sub { return $x * 19 };
return $x + inner( );
}



Now
inner( ) can be called only from within
outer( ) because of the temporary assignments of
the closure. Once called, it has normal access to the lexical
variable $x from the scope of outer(
).

This essentially creates a function local to another function,
something not directly supported in Perl; however, the programming
isn't always clear.

10.16.4. See Also


The sections on "Symbol Tables" in Chapter 10 in
Programming Perl and in
perlmod(1); the sections on "Closures" and
"Symbol Table References" in Chapter 8 of
Programming Perl and
the discussion of closures in perlref(1);
Recipe 10.13; Recipe 11.4



10.15. Trapping Undefined Function Calls with AUTOLOAD10.17. Writing a Switch Statement




Copyright © 2003 O'Reilly & Associates. All rights reserved.

/ 875