功能 chomp() Perl

在Perl编程语言都有一个内置的功能 chomp(). 你可以使用这一功能工作时用弦。 在最简单的情况下,功能 chomp() 删除最后一个 符号 \n交流 这是一个通过了论据的功能。

这里有一个例子:

▶ Run
#!/usr/bin/perl

my $string = "ASDF\n";

chomp($string);

print "'$string'";

这个程序将显示该文本 'ASDF'.

  • 如果价值的变量并没有结束 \n,价值将不会改变
  • 如果一个变量包含超过一个字符 \n 在结束,这将被删除只字 \n

参数

如果功能 chomp 不通过任何论点、功能适用 的默认可变 $_:

▶ Run
#!/usr/bin/perl

$_ = "123\n";

chomp;

print "'$_'";

在这种情况下,如果可变 $_undef 和使用 use warnings;,会警告:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

chomp;
Use of uninitialized value $_ in scalar chomp at script.pl line 6.

在功能 chomp() ,可以通过标量阵列、哈希。 在这种情况下的散列 该功能将只适用价值观的钥匙的钥匙自己不会改变。

该论据的功能 chomp() ,必须始终是可变的。 如果 以尝试通过这个函数的一个字符串中,它将错误和程序的执行 将停止:

▶ Run
#!/usr/bin/perl

chomp("ASDF\n"); # Error!
Can't modify constant item in chomp at script.pl line 3, near ""ASDF\n")"
Execution of script.pl aborted due to compilation errors.

回值

功能 chomp() 总是返回的一个整数大于或等于 0. 如果功能返回 0,这意味着,没有更换。 数量更多的 0 意味着它有多少变化。

这里是一个例子的时的情况功能 chomp() 返回的数量 2:

▶ Run
#!/usr/bin/perl

my @arr = ("ASDF\n", "QWERTY\n");
print chomp(@arr);

这里是一个例子使用返回的价值,以满足不同 代码,如果有一个替代或替换不是:

▶ Run
#!/usr/bin/perl

use feature qw(say);

my $string = "ASDF\n";

if (chomp($string)) {
    say 'Removed \n';
} else {
    say 'String is unchanged';
}

print "'$string'";

$/

功能 chomp() 删除线符号其中包含在全球 变 $/. 默认情况下,这个变量包含符号 \n. 但你可以的岗位在这 一个变量的其他一些符号和随后的功能 chomp() 将其删除。 这里有一个例子:

▶ Run
#!/usr/bin/perl

$/ = "F";

my $string = "ASDF";

chomp($string);

print "'$string'";

该程序将显示该文本 'ASD'.

在这种情况下,如果的变量是一个空string($/ = '';), 然后 chomp() 将消除单后 \n,和所有的人物 \n 在结束行。

标准的使用

经常功能的 chomp() 是用来读取行行 从文件。 为处理串从一个文件,它通常是方便的,在这些线路是不是 这是符号 \n 时结束的线:

#!/usr/bin/perl

use strict;
use warnings;
use utf8;
use open qw(:std :utf8);

my $file_name = 'a.csv';

open FILE, '<', $file_name or die $!;

while my $line (<FILE>) {
    chomp($line);
    print "Parsing line $line";
}

删除所有的字 \n 的末尾行

通常的功能 chomp() 只删除一个字符 \n 底线:

▶ Run
#!/usr/bin/perl

my $string = "Line1\nLine2\n\n\n";

chomp($string);

print "'$string'";

其结果是:

'Line1
Line2

'

有几种方法可以如何消除所有的符号 \n 底线。

这里的一个例子是使用普通的表达方式:

▶ Run
#!/usr/bin/perl

my $string = "Line1\nLine2\n\n\n";

$string =~ s/\n*$//;

print "'$string'";

另一种方式消除所有后空间的设定值 变 $/ 到一个空string:

▶ Run
#!/usr/bin/perl

$/ = '';

my $string = "Line1\nLine2\n\n\n";

chomp($string);

print "'$string'";

使用经常表达是更好:它是清楚的,并不会改变 全球变这可能会影响在其他代码 零部件的程序。

官方文件

这里是输出的命令 perldoc -f chomp:

       chomp VARIABLE
       chomp( LIST )
       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.
               It's often used to remove the newline from the end of an input
               record when you're worried that the final record may be missing
               its newline.  When in paragraph mode ("$/ = """), it removes
               all trailing newlines from the string.  When in slurp mode ("$/
               = undef") or fixed-length record mode ($/ is a reference to an
               integer or the like; see perlvar) chomp() won't remove
               anything.  If VARIABLE is omitted, it chomps $_.  Example:

                   while (<>) {
                       chomp;  # avoid \n on last field
                       @array = split(/:/);
                       # ...
                   }

               If VARIABLE is a hash, it chomps the hash's values, but not its
               keys.

               You can actually chomp anything that's an lvalue, including an
               assignment:

                   chomp($cwd = `pwd`);
                   chomp($answer = );

               If you chomp a list, each element is chomped, and the total
               number of characters removed is returned.

               Note that parentheses are necessary when you're chomping
               anything that is not a simple variable.  This is because "chomp
               $cwd = `pwd`;" is interpreted as "(chomp $cwd) = `pwd`;",
               rather than as "chomp( $cwd = `pwd` )" which you might expect.
               Similarly, "chomp $a, $b" is interpreted as "chomp($a), $b"
               rather than as "chomp($a, $b)".

其他文章