chomp in perl not working as expected

前端 未结 4 1728
逝去的感伤
逝去的感伤 2021-01-14 06:33

I found a strange behavior of chomp in Perl and I am unable to comprehend why is chomp is working like this.

The following line does not work as expected

<         


        
相关标签:
4条回答
  • 2021-01-14 06:40

    chomp modifies its argument. It does not return a modified argument. The second example is, in fact, how you're supposed to use it.

    edit: perldoc -f chomp says:

       chomp   This safer version of "chop" removes any trailing string that
               corresponds to the current value of $/ (also known as
               $INPUT_RECORD_SEPARATOR in the "English" module).  It returns
               the total number of characters removed from all its arguments.
    
    0 讨论(0)
  • 2021-01-14 06:53

    I like the name chomp() it's sound tells you what it does. As @ruakh mentions it takes one or more arguments, so you can say:

    chomp($str1,$str2);
    if ( $str1 eq $str2 ) ...
    

    You can also hand it an array of strings, like what you would get from reading a whole file at once, e.g.:

    chomp(@lines);
    
    0 讨论(0)
  • 2021-01-14 06:58

    chomp returns the number of characters removed, not the strings that have been chomped.

    0 讨论(0)
  • 2021-01-14 07:02

    Generally, you can use s,$/$,,r regex as a non-destructive chomp. It removes record separator $/ from the end of $_ or the string provided using =~, and returns the result without modifying anything. Your example would look like this:

    if ( $str1 =~ s,$/$,,r eq $str2 =~ s,$/$,,r )
    

    More formally the regex should be s,\Q$/\E$,,r, so $/ is not treated as regex. In paragraph mode the regex would need to be s,\n*$,,r. In slurp or fixed record mode the regex is not needed at all (chomp does nothing).

    0 讨论(0)
提交回复
热议问题