Stories
Slash Boxes
Comments
NOTE: use Perl; is on undef hiatus. You can read content, but you can't post it. More info will be forthcoming forthcomingly.

All the Perl that's Practical to Extract and Report

The Fine Print: The following comments are owned by whoever posted them. We are not responsible for them in any way.
 Full
 Abbreviated
 Hidden
More | Login | Reply
Loading... please wait.
  • See http://svn.pugscode.org/pugs/examples/cashiers.pl [pugscode.org]

    # Demo of the state() variable declaration.
    # This is also a neat way of doing OO without actually having OO available.
    #
    # Please remember to update t/examples/examples.t and rename
    # examples/output/cashiers if you rename/move this file.
     
    use v6-alpha;
     
    sub gen_cashier () {
        # This variable corresponds to a class variable.
        # It is shared across all "instances" of gen_cashier().
        state $cash_in_store = 0;
     
        # One could add my() variables here, which correspond to instance variables.
        # These would not be shared.
     
        # Finally, we return a hashref which maps method names to code.
        return {
            add => { $cash_in_store += $^amount },
            del => { $cash_in_store -= $^amount },
            bal => { $cash_in_store             },
        };
    }
     
    my $drawer;
    $drawer[$_] = gen_cashier() for 1..3;
     
    $drawer[1]<add>( 59 );
    $drawer[2]<del>( 17 );
    say $drawer[3]<bal>();  # This should say "42"
    It was written back in July of 2005 before pugs had OO.

    I don't have pugs installed at work to test and I can't remember the right fu to get the evalbot in #perl6 to test for me
    • I don't think that it did. Certainly, that example is not a good enough test, because it makes all three calls to gen_cashier before it uses any of the closures, so it makes no difference how many times that assignment of 0 is performed. If I re-write it like this

      use v6-alpha;

      sub gen_cashier () {
          # This variable corresponds to a class variable.
          # It is shared across all "instances" of gen_cashier().
          state $cash_in_store = 0;

          # One could add my() variab