perl,具有s ///的怪异行为

甲骨文58

我很尴尬地问这个问题,因为它是如此简单,但是我看不出有什么问题。我有一个例程可以清理IP范围的输入。这有点蛮力,但我不知道有更好的方法。我遇到的问题是,当我尝试删除仅保留'-'或''的内部空间时,因为条件块中的分隔符将单个前导和尾随空格括在分隔符中。如果我清理条件块外部的内部空间,则会正确删除这些空间。因此,在示例代码中,如果我在第1行上只有s / \ s + // g,它会正确清理;如果我在第2行和第3行上只有s / \ s + // g,则将空格括在方括号“-”中和','。到底是什么问题?

use feature qw(say);
use Data::Dumper qw(Dumper);

$input = "   192.168.1.1       198.168.1.254     ";
buildIpRangeArray ($input);

$input = "   192.168.1.1  ,     198.168.1.254     ";
buildIpRangeArray ($input);

$input = "   192.168.1.1    -  198.168.1.254     ";
buildIpRangeArray ($input);

sub buildIpRangeArray {

    say "input: $input";

    $input = shift;
    $input =~ s/^\s+//;
    $input =~ s/\s+$//;
#    $input =~ s/\s+//g;                    # Line 1. 
                                            # Works if this is uncommented
                                            # and lines 2 and 3 are omitted

    if ( index($input,' ') >= 0) {
        $input =~ s/\s+/ /g;                # this works
        say "cleaned input 2: $input";
        @range = split(/ /,$input);
        say Dumper(@range);
    }
    elsif ( index($input,',') >= 0) {
        $input =~ s/\s+//g;                 # Line 2
        say "cleaned input 3: $input";
        @range = split(/,/, $input);
        say Dumper(@range);
    }
    elsif ( index($input,'-') >= 0) {
        $input =~ s/\s+//g;                 # Line 3
        say "cleaned input 4: $input";
        @range = split(/-/, $input);
        say Dumper(@range);
    }
}
The output:
input:    192.168.1.1       198.168.1.254     
cleaned input 2: 192.168.1.1 198.168.1.254
$VAR1 = '192.168.1.1';
$VAR2 = '198.168.1.254';

input:    192.168.1.1  ,     198.168.1.254     
cleaned input 2: 192.168.1.1 , 198.168.1.254
$VAR1 = '192.168.1.1';
$VAR2 = ',';
$VAR3 = '198.168.1.254';

input:    192.168.1.1    -  198.168.1.254     
cleaned input 2: 192.168.1.1 - 198.168.1.254
$VAR1 = '192.168.1.1';
$VAR2 = '-';
$VAR3 = '198.168.1.254';
津巴布韦

如果查看调试输出,则很明显发生了什么。让我们以逗号作为第二个输出块。

input:    192.168.1.1  ,     198.168.1.254     
cleaned input 2: 192.168.1.1 , 198.168.1.254
$VAR1 = '192.168.1.1';
$VAR2 = ',';
$VAR3 = '198.168.1.254';

输入,有一个检查,看看是否有一个空间' '中的字符串中。在这里:

           V
192.168.1.1 , 198.168.1.254

因此,代码永远不会到达elsif逗号,或破折号-您可以验证由于始终获得输入2,所以永远不要输入3输入4

下一步是清理空白,您可以在其中说出来。您可以用一个空格替换许多空白。那留,在字符串中。现在,您在空白处分割,给您

ip
,
ip

总体而言,您的代码相当幼稚。重复很多,而您没有use strictor use warnings,这使得调试变得更加困难。根据如何使用此代码,我建议进行大量简化。

sub buildIpRangeArray {
    my $input = shift;

    say "input: $input";

    my @range = grep {$_} split /[^0-9.]+/, $input;
    say Dumper @range;
    return;
}

我们分割了很多IP地址中不能包含的字符。这也很幼稚,因为它不会验证您是否具有实际的IP地址,但是您的代码也不会。它适用于任何数量的空格或任何定界符,即使它们是文本。我们需要grep删除开头或结尾空格中出现的空字符串。""Perl中的空字符串评估为false,因此grep将其过滤掉。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

带有TextBox的Angular怪异行为

来自分类Dev

NSIS带有GetParameters的怪异行为

来自分类Dev

Excel具有日期的怪异行为=>文本

来自分类Dev

SecureRandom具有多个线程的流怪异行为

来自分类Dev

Excel具有日期=>文本的怪异行为

来自分类Dev

具有Firebase怪异行为的SignIn界面

来自分类Dev

目标c-带有int的怪异行为

来自分类Dev

Laravel PHPUnit测试,带有seePageIs()的怪异行为

来自分类Dev

self =带有剔除的嵌套viewmodel中的怪异行为

来自分类Dev

带有c ++ asio库的Websocket怪异行为

来自分类Dev

带有大量数字的怪异行为python

来自分类Dev

带有$ resource和$ httpBackend的AngularJS怪异行为

来自分类Dev

Sprite Kit中具有多个Sprite的for循环的怪异行为

来自分类Dev

具有浮点输入和输出值的简单C代码的怪异行为

来自分类Dev

具有接口的通用协方差-“ is”和“ =”运算符之间的怪异行为矛盾

来自分类Dev

PHP max()和min()具有不同类型的怪异行为

来自分类Dev

具有怪异行为的井字游戏Minimax算法(C ++)

来自分类Dev

具有条件数据属性的怪异行为

来自分类Dev

自定义UITableViewCell具有快速滚动的怪异行为

来自分类Dev

具有浮点输入和输出值的简单C代码的怪异行为

来自分类Dev

Primefaces具有数据表,overlayPanel和过滤器/排序的怪异行为

来自分类Dev

具有绑定属性的怪异行为和ListView中的直接可见性更改

来自分类Dev

具有空格字符的长生不老药中的怪异行为

来自分类Dev

Python-带有多处理的怪异行为-连接未执行

来自分类Dev

启用/禁用状态下带有tintColor的UIButton的怪异行为

来自分类Dev

C语言中带有换行符的printf的怪异行为

来自分类Dev

JFrame的怪异行为,屏幕有时会完全变白

来自分类Dev

带有自定义不确定进度视图的怪异行为-ProgressDialog

来自分类Dev

带有PHP \ array_rand(x,y)的foreach()的怪异行为

Related 相关文章

  1. 1

    带有TextBox的Angular怪异行为

  2. 2

    NSIS带有GetParameters的怪异行为

  3. 3

    Excel具有日期的怪异行为=>文本

  4. 4

    SecureRandom具有多个线程的流怪异行为

  5. 5

    Excel具有日期=>文本的怪异行为

  6. 6

    具有Firebase怪异行为的SignIn界面

  7. 7

    目标c-带有int的怪异行为

  8. 8

    Laravel PHPUnit测试,带有seePageIs()的怪异行为

  9. 9

    self =带有剔除的嵌套viewmodel中的怪异行为

  10. 10

    带有c ++ asio库的Websocket怪异行为

  11. 11

    带有大量数字的怪异行为python

  12. 12

    带有$ resource和$ httpBackend的AngularJS怪异行为

  13. 13

    Sprite Kit中具有多个Sprite的for循环的怪异行为

  14. 14

    具有浮点输入和输出值的简单C代码的怪异行为

  15. 15

    具有接口的通用协方差-“ is”和“ =”运算符之间的怪异行为矛盾

  16. 16

    PHP max()和min()具有不同类型的怪异行为

  17. 17

    具有怪异行为的井字游戏Minimax算法(C ++)

  18. 18

    具有条件数据属性的怪异行为

  19. 19

    自定义UITableViewCell具有快速滚动的怪异行为

  20. 20

    具有浮点输入和输出值的简单C代码的怪异行为

  21. 21

    Primefaces具有数据表,overlayPanel和过滤器/排序的怪异行为

  22. 22

    具有绑定属性的怪异行为和ListView中的直接可见性更改

  23. 23

    具有空格字符的长生不老药中的怪异行为

  24. 24

    Python-带有多处理的怪异行为-连接未执行

  25. 25

    启用/禁用状态下带有tintColor的UIButton的怪异行为

  26. 26

    C语言中带有换行符的printf的怪异行为

  27. 27

    JFrame的怪异行为,屏幕有时会完全变白

  28. 28

    带有自定义不确定进度视图的怪异行为-ProgressDialog

  29. 29

    带有PHP \ array_rand(x,y)的foreach()的怪异行为

热门标签

归档