现在把上面两个例子结合起来。首先提示用户输入一个值,接收这个输入,用一个正则表达式
来验证,确保输入的是一个数值。如果是,我们就计算相应的华氏温度,否则,我们输出一
条报警信息:
print "Enter a temperature in Celsius:\n";
$celsius = <STDIN>; #从用户处接受一个输入
chomp($celsius); #去掉$celsius后面的换行符
if ($celsius =~ m/^[0-9]+$/){
$fatrenheit = ($celsius * 9 / 5) + 32; #计算华氏温度
print "$celsius C is $fahrenhei F\n";
}else {
print "Expecting a number, so I don‘t understand\"$celsius\".\n";
}
VB.NET是个明显的例外,在那里转义双引号用‘""‘而不是‘\"。
Perl中同样也存在printf来进行格式化输出:
printf "%.2f C is %.2f F\n", $celsius, $fahrenheit;
这里的printf类似c语言中的printf,或者Pascal,Tcl,elisp和Python中的format。它不会更改
变量的值,而只是改变显示的方式。
用环视功能为数值添加逗号
大的数值,如果在其间加入逗号,会更容易看懂。下面的程序:
print "The US population is $pop\n";
可能输出"The US population is 298444215,但对大多数说英语的人来说,298,444,215
看起来更加自然。
你可能会想到,我们应该从这个数的右边开始,每次数3位数字,如果左边还有数字的话,
就加入一个逗号。但可惜正则表达式一般是从左向右工作的。不过换个思路就会发现,逗
号应该加在“左边有数字,右边数字的个数正好是3的倍数的位置”。我们使用一组相对较
新的正则表达式特性“环视”来轻松地解决这个问题。
//对于命令行的每个参数进行如下处理...
for (int i = 0; i < args.length; i++)
{
try {
BufferedReader in = new BufferedReader(new FileReader(args[i]));
String text;
//For each paragraph of each file...
while ((text = getPara(in)) != null)
{
//应用3条替换规则
text = regex1.matcher(text).replaceAll(replace1);
text = regex2.matcher(text).replaceAll("");
text = regex3.matcher(text).replaceAll(args[i] + ":$1");