我刚开始学习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
答案 0 :(得分:3)
替换正则表达式
s/\w<([^>]+)>/\U$1/g;
查找字母数字字符(示例文本中的X和C),然后是<
,捕获任何不是>
的字符,后跟>
。然后它将捕获的字符串放回,使用转义序列\U
将其转换为大写。
我的问题是:X和C来自哪里?
他们已经在perldoc文本中了。然而,他们被替换正则表达式删除。也许你的输入和输出很混乱。
答案 1 :(得分:0)
您确定不会混淆您的输入和放大器吗?输出? 代码看起来像它会转换“z&lt; something&gt;”进入“SOMETHING”。