基本的perl代码细分

时间:2012-08-24 15:00:41

标签: perl

我刚开始学习perl,在本书给出的示例代码中有这一行:

#!/usr/bin/perl
@lines = `perldoc -u -f atan2`;
foreach (@lines) {
s/\w<([^>]+)>/\U$1/g;
print;
}

代码有效,这不是问题。另外通过观察输入和输出,我知道这一行:

s/\w<([^>]+)>/\U$1/g;

这样做

ATAN2 ARCTANGENT TAN TANGENT <--- X<atan2> X<arctangent> X<tan> X<tangent>

和这个

MATH::TRIG::TAN <------- C<Math::Trig::tan>

我的问题是:X和C来自哪里?


作为一个FYI:如果我不使用代码,这是我的输出:

perldoc -u -f atan2
=over 8

=item atan2 Y,X
X<atan2> X<arctangent> X<tan> X<tangent>

Returns the arctangent of Y/X in the range -PI to PI.

For the tangent operation, you may use the C<Math::Trig::tan>
function, or use the familiar relation:

    sub tan { sin($_[0]) / cos($_[0])  }

The return value for C<atan2(0,0)> is implementation-defined; consult
your atan2(3) manpage for more information.

=back

以下是代码的完整输出:

[/cygdrive/c/Users/Documents/learn_perl]$ ./hello_world.pl 
=over 8

=item atan2 Y,X
ATAN2 ARCTANGENT TAN TANGENT

Returns the arctangent of Y/X in the range -PI to PI.

For the tangent operation, you may use the MATH::TRIG::TAN
function, or use the familiar relation:

    sub tan { sin($_[0]) / cos($_[0])  }

The return value for ATAN2(0,0) is implementation-defined; consult
your atan2(3) manpage for more information.

=back

2 个答案:

答案 0 :(得分:3)

替换正则表达式

s/\w<([^>]+)>/\U$1/g;

查找字母数字字符(示例文本中的X和C),然后是<,捕获任何不是>的字符,后跟>。然后它将捕获的字符串放回,使用转义序列\U将其转换为大写。

  

我的问题是:X和C来自哪里?

他们已经在perldoc文本中了。然而,他们被替换正则表达式删除。也许你的输入和输出很混乱。

答案 1 :(得分:0)

您确定不会混淆您的输入和放大器吗?输出? 代码看起来像它会转换“z&lt; something&gt;”进入“SOMETHING”。