Perl-Critic-Policy-CompileTime

 view release on metacpan or  search on metacpan

lib/PPIx/PerlCompiler/Statement.pm  view on Meta::CPAN


    return 0;
}

sub concise_string {
    my ($self) = @_;

    my $string = $self->content;

    chomp $string;

    $string =~ s/\s+/ /g;

    return $string;
}

sub mutates_special_var {
    my ($self) = @_;

    my $pattern = qr{^
        (?:
            \$[\(\)<>"\/0] |
            [\$\@%](?:
                  ENV
                | SIG
                | ARGV
                | ARGVOUT
                | REAL_GROUP_ID
                | GID
                | REAL_USER_ID
                | UID
                | EFFECTIVE_GROUP_ID
            )
        )
    $}xms;

    return $self->isa_nonlexical_assignment_to($pattern);
}

sub performs_system_io {
    my ($self) = @_;

    my @patterns;

    #
    # Core Perl I/O builtins and POSIX:: variants
    #
    push @patterns, qr{^
        (?:sys|POSIX::|)(?:
              open(?:dir|)
            | close(?:dir|)
            | (?:f|)read
            | (?:f|)write
            | print(?:f|)
            | unlink
            | rmdir
            | tell
            | dup(?:|2)
            | pipe
            | chmod
            | chown
            | creat
            | mknod
            | mkdir
            | exec(?:ve|le|l|v|lp|vp|)
            | fcntl
            | fdopen
            | feof
            | eof
            | (?:f|)flush
            | (?:f|)seek
        )
    $}xms;

    #
    # IPC::Open3
    #
    push @patterns, qr{^(?:IPC::Open3::|)open3$};

    foreach my $pattern (@patterns) {
        return 1 if $self->contains_call_to($pattern);
    }

    return 0;
}

sub performs_process_ops {
    my ($self) = @_;

    my $pattern = qr{^
        (?:POSIX::|)(?:
            | exec(?:ve|le|l|v|lp)
            | exit
            | fork
        )
    $}xms;

    return $self->contains_call_to($pattern);
}

sub has_string_eval {
    my ($self) = @_;

    my $last;

    foreach my $child ( @{ $self->{'children'} } ) {
        next if $child->isa('PPI::Token::Whitespace');

        if ( $last && $last->matches( 'PPI::Token::Word' => 'eval' ) ) {
            return 1 if $child->isa('PPI::Token::Quote');

            if ( $child->isa('PPI::Structure::List') ) {
                my $first = $child->item(0) or return 0;

                return 1 if $first->isa('PPI::Token::Quote');
            }
        }

        $last = $child;
    }



( run in 2.900 seconds using v1.01-cache-2.11-cpan-71847e10f99 )