【问题标题】:Perl: How to pass in an input without being replaced by the substitution s/// Operator?Perl:如何在不被替换 s/// 运算符替换的情况下传入输入?
【发布时间】:2017-10-05 00:56:56
【问题描述】:

例如,

$test = "abc";
$test =~ s/b//g;

通常测试将是交流。如何操作字符串“abc”,使其通过此测试并仍返回 abc。

我正在尝试进行命令注入,因此无法更改 $test =~ s/b//g;但可以改变输入。

希望这是有道理的。

【问题讨论】:

  • 我建议您阅读传统的起点,perle perldoc.perl.org/perlre.html 从“基础知识”开始 - 它涵盖了这一点以及更多有用的内容。
  • 不清楚你在问什么。您可能会问以下问题之一:如何在保留结果中匹配内容的一部分的同时执行替换,或者如何在没有替换的情况下匹配,或者如何执行替换以使效果显示在新的目标变量中而不是在原始目标中。
  • pos($test) = length($test);
  • 究竟是什么测试? $test 中是否有'b' 字符?你能用语言说出你的“测试”吗?还有,你不想改变什么——变量$test,字符串'abc'被读入其中?

标签: string perl command code-injection


【解决方案1】:

您想使用 /r 修饰符。这是一个新功能,所以旧版本不会运行它

$test = "abc";
my $str= $test =~ s/b//gr;

http://perldoc.perl.org/perlre.html#Modifiers

【讨论】:

  • 假设我们不能只改变字符串 abc。我们将如何做到这一点?
  • 打印“失败”,除非 $test =~ s/b//g ;
  • @user5454895 你的意思还不是很清楚。你不能改变字符串——它是一个文字值——你的意思是你想避免改变分配给字符串的变量,在它等于'abc'的情况下,但很乐意在其他情况下改变它?或者'abc'只是一个例子,你不想在测试时更改字符串而不考虑值?简单的英语规则到底是什么?
【解决方案2】:

没有可以传递给s/b//g 的字符串会产生包含b 的字符串。

但是,如果您可以访问 $test 而不仅仅是它的值,您可以设置它的 pos,这样替换运算符就不会找到任何东西。

$ perl -e'
   my $test = "abc";
   pos($test) = length($test);
   $test =~ s/b//g;
   CORE::say($test);
'
ac

【讨论】:

    猜你喜欢
    • 2015-06-10
    • 2014-11-14
    • 1970-01-01
    • 2010-09-28
    • 1970-01-01
    • 1970-01-01
    • 2011-02-04
    • 2013-01-29
    相关资源
    最近更新 更多