Reading output from command into Perl array

前端 未结 3 1074
无人及你
无人及你 2020-12-20 13:26

I want to get the output of a command into an array — like this:

my @output = `$cmd`;

but it seems that the output from the command

相关标签:
3条回答
  • 2020-12-20 13:52

    The (standard) output does go to that array:

    david@cyberman:listing # cat > demo.pl
    #!/usr/bin/perl
    use strict;
    use warnings;
    use v5.14;
    use Data::Dump qw/ddx/;
    
    my @output = `ls -lh`;
    ddx \@output;
    david@cyberman:listing # touch a b c d
    david@cyberman:listing # perl demo.pl
    # demo.pl:8: [
    #   "total 8\n",
    #   "-rw-r--r--  1 david  staff     0B  5 Jun 12:15 a\n",
    #   "-rw-r--r--  1 david  staff     0B  5 Jun 12:15 b\n",
    #   "-rw-r--r--  1 david  staff     0B  5 Jun 12:15 c\n",
    #   "-rw-r--r--  1 david  staff     0B  5 Jun 12:15 d\n",
    #   "-rw-r--r--  1 david  staff   115B  5 Jun 12:15 demo.pl\n",
    # ]
    
    0 讨论(0)
  • 2020-12-20 13:53

    This simple script works for me:

    #!/usr/bin/env perl
    use strict;
    use warnings;
    
    my $cmd = "ls";    
    my @output = `$cmd`;    
    chomp @output;
    
    foreach my $line (@output)
    {
        print "<<$line>>\n";
    }
    

    It produced the output (except for the triple dots):

    $ perl xx.pl
    <<args>>
    <<args.c>>
    <<args.dSYM>>
    <<atob.c>>
    <<bp.pl>>
    ...
    <<schwartz.pl>>
    <<timer.c>>
    <<timer.h>>
    <<utf8reader.c>>
    <<xx.pl>>
    $
    

    The output of command is split on line boundaries (by default, in list context). The chomp deletes the newlines in the array elements.

    0 讨论(0)
  • 2020-12-20 14:13

    Enable automatic error checks:

    require IPC::System::Simple;
    use autodie qw(:all);
    ⋮
    my @output = `$cmd`;
    
    0 讨论(0)
提交回复
热议问题