Perl: 将要执行的外部命令拆分为多行

本文介绍了在Perl中如何使用``或qx//函数执行外部命令,并获取命令执行结果。当命令参数较多时,通常需要提高代码的可读性。在Bash中可以使用反斜杠拆分行,但在Perl中这样会导致错误。解决方法是使用两个反斜杠进行转义,或者使用q''来避免Perl的双引号展开,从而实现多行命令的书写。示例代码展示了如何正确地执行多行命令并打印结果。
摘要由CSDN通过智能技术生成

注: 文章中的示例代码都在 Linux 平台下运行。

在 Perl 中,可以通过 `` qx// 函数方便的执行一些外部命令,并获取到命令的执行结果,例如下面的 Perl 代码片段可以获取到当前的时间:

#!/usr/bin/perl

use strict;
use warnings;

my $now = `date`;
print "now: $now";

输出结果示例:

now: 2022年 04月 09日 星期六 09:09:00 CST

有时候,要执行的外部命令参数比较多,都写在一行的话,可读性会比较差;在 Bash 中,我们可以通过在行尾使用反斜杠的方法,把命令拆分为多行,增加可读性:

#!/bin/bash

echo line1 \
    line2 \
    line3
# 输出结果: line1 line2 line3

但是这样的方法,直接用在 Perl 中会有报错,例如下面的代码:

#!/usr/bin/perl

use strict;
use warnings;

my $res = `echo line1 \
    line2 \
    line3`;

print "$res";

在执行后,会有如下报错信息:

sh: 2: line2: not found
sh: 3: line3: not found
line1

这是因为 `` 操作符就像是双引号一样,其中的变量、\t 、\n 等会在执行命令前被展开或转义,因此要想写入一个反斜杠 \,就要在代码中写两个反斜杠 \\。示例如下:

#!/usr/bin/perl

use strict;
use warnings;

my $res = `echo line1 \\
    line2 \\
    line3`;

print "$res";

上面的代码执行时就会得到正确的输出:

line1 line2 line3

一种更简单的方法


当你要执行的命令中不需要包含变量或转义字符时,有一种更简单的方法可以将命令拆分为多行,就是使用 q'',参考 qx 的帮助手册:

Using single-quote as a delimiter protects the command from Perl's
double-quote interpolation, passing it on to the shell instead:

    $perl_info  = qx(ps $$);            # that's Perl's $$
    $shell_info = qx'ps $$';            # that's the new shell's $$


perldoc -f qx

当使用 q'' 来执行外部命令时,将命令拆分为多行,只需要写一个反斜杠就可以了。示例如下:

#!/usr/bin/perl

use strict;
use warnings;

my $res = qx'echo line1 \
    line2 \
    line3';

print "$res";
# 输出结果: line1 line2 line3

 一如既往,如果你对文章中的内容有任何疑问,或者是发现文章中有任何错误,都可以通过留言告诉我;如果你喜欢我的文章,欢迎关注我的微信公众号。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值