perl:将变量附加到字符串(如果存在) < >我想做的是创建一个字符串,在中间,如果变量求值为真,则有一个字符串,但如果没有,则省略该部分。所以我试着这么做: my $var1 = "hello"; my $var2 = shift; my $var3 = "my friend"; if ($var2){ print "$var1 <$var2> $var3\n"; } else { print "$var1 $var3\n"; }

perl:将变量附加到字符串(如果存在) < >我想做的是创建一个字符串,在中间,如果变量求值为真,则有一个字符串,但如果没有,则省略该部分。所以我试着这么做: my $var1 = "hello"; my $var2 = shift; my $var3 = "my friend"; if ($var2){ print "$var1 <$var2> $var3\n"; } else { print "$var1 $var3\n"; },perl,Perl,输出: $ perl test.pl hello my friend $ perl test.pl there hello <there> my friend 这显然是完美的功能,但我想知道是否有一种方法可以在线进行检查。比如: print "$var1 " . ("<$var2> " if $var2) . "$var3\n"; 但这给了我一个语法错误。或者如果有一种方法可以在字符串中使用替换,那就更好了。将变量从@移位并插入,如果它在那里的话 print $var

输出:

$ perl test.pl
hello my friend
$ perl test.pl there
hello <there> my friend
这显然是完美的功能,但我想知道是否有一种方法可以在线进行检查。比如:

print "$var1 " . ("<$var2> " if $var2) . "$var3\n";
但这给了我一个语法错误。或者如果有一种方法可以在字符串中使用替换,那就更好了。

将变量从@移位并插入,如果它在那里的话

print $var1 . (shift // '') . $var2;
例如,插入了空格

sub concat {
   my ($var1, $var2) = ("Hello", "Friend");
   print $var1 . (shift // ' ') . $var2, "\n";
}

concat();
concat(" my dear ");
可能存在空间设计问题,请根据需要进行更改。这张照片

Hello Friend Hello my dear Friend 在子类中,并且不声明额外变量

sub concat {
    my ($var1, $var2) = ("Hello", "Friend");
    print $var1 . (@_ ? ' <' . join(' ', @_) . '> ' : ' ') . $var2, "\n";
}

concat();
concat("my dear");
concat("my", "very", "dear");
印刷品

你好,朋友 你好,朋友 你好,朋友 同样,根据应用程序更改空间的处理方式

您也可以有条件地在现有字符串上使用substr,但这更麻烦。

将变量从@移位并插入(如果有)

print $var1 . (shift // '') . $var2;
例如,插入了空格

sub concat {
   my ($var1, $var2) = ("Hello", "Friend");
   print $var1 . (shift // ' ') . $var2, "\n";
}

concat();
concat(" my dear ");
可能存在空间设计问题,请根据需要进行更改。这张照片

Hello Friend Hello my dear Friend 在子类中,并且不声明额外变量

sub concat {
    my ($var1, $var2) = ("Hello", "Friend");
    print $var1 . (@_ ? ' <' . join(' ', @_) . '> ' : ' ') . $var2, "\n";
}

concat();
concat("my dear");
concat("my", "very", "dear");
印刷品

你好,朋友 你好,朋友 你好,朋友 同样,根据应用程序更改空间的处理方式


您也可以有条件地在现有字符串上使用substr,但这会更麻烦。

最好的选择是在变量进入时对其进行清理,但是如果您要导入大量变量,则为已定义的变量或变量列表添加grep可能会更干净,从而过滤掉那些没有值的变量。然后你可以把它们和你的空间连接起来

代替{defined},您可以执行类似{/[\w\d]/}的操作来确保传入了字母或数字,这将解决大多数空白字符串问题。您还可以实现修剪并查看长度或其他一些指标来清理您的输入-无论什么最能传达您的需要

编辑:
因为可以有更广泛的格式,上面创建了一个单独的子例程,但是它可以像my@arr=map{}grep{defined and length}@;没有子格式\u输入。。。完全可以使用。

最好的选择是在变量输入时对其进行清理,但是如果您要导入大量变量,则为已定义的变量grep参数或变量列表可能会更干净,从而过滤掉那些没有值的变量。然后你可以把它们和你的空间连接起来

代替{defined},您可以执行类似{/[\w\d]/}的操作来确保传入了字母或数字,这将解决大多数空白字符串问题。您还可以实现修剪并查看长度或其他一些指标来清理您的输入-无论什么最能传达您的需要

编辑:
因为可以有更广泛的格式,上面创建了一个单独的子例程,但是它可以像my@arr=map{}grep{defined and length}@;没有子格式\u输入。。。根本不用。

这能处理尖括号吗?i、 它能打印“你好,我的朋友”还是“你好,我的朋友”?巧妙地包括或排除?伊渥克对,我想问一下那些尖括号-你是说像文字字符吗?或正在读取某些文件句柄?文字字符。如果$var2的计算结果为true并被忽略,我希望尖括号位于打印字符串中otherwise@ewok对,我明白了。我错过了。我要添加。@ewok Posted,这足够好吗?我在想一些更简洁的东西。这个能处理尖括号吗?i、 它能打印“你好,我的朋友”还是“你好,我的朋友”?巧妙地包括或排除?伊渥克对,我想问一下那些尖括号-你是说像文字字符吗?或正在读取某些文件句柄?文字字符。如果$var2的计算结果为true并被忽略,我希望尖括号位于打印字符串中otherwise@ewok对,我明白了。我错过了。我要添加。@ewok Posted,这足够好吗?我正在考虑更简洁的东西。打印$var1$var2?:$var3\n;打印$var1$var2?:$var3\n;如何增强此功能以处理尖括号?我不只是想你好,我的朋友我想你好,我的朋友friend@ewok最终编辑,在格式化之前显示清理,以考虑未定义和空白字符串输入;如果空白字符串应表示为,则从grep条件中删除和长度。如何增强此功能以处理尖括号?我不只是想你好,我的朋友我想你好,我的朋友friend@ewok最终编辑,在格式化之前显示清理,以考虑未定义和空白字符串输入;如果空白字符串应表示为,则从grep条件中删除和长度。