使用case语句使用Perl从网页检索信息

时间:2012-10-25 02:47:38

标签: perl

我目前正在尝试提取和分解包含温度读数的网页的信息。对于Perl而言,我是一个完全的初学者,而且我遇到了一些麻烦。我尝试从中提取信息的页面是:http://temptrax.itworks.com/temp。 到目前为止,我能够弄清楚如何获取页面并使用split将四个温度读数分解为四行。到目前为止,我能够提出这个问题:

#!/usr/bin/perl
use warnings;
use LWP::Simple;
use v5.10.1;

my $content = get('http://temptrax.itworks.com/temp');
my @split = split ('Probe',$content);

foreach my $split(@split){
$split =~ s/'Probe''|'/ /g;

print $split . "\n";

}

我遇到问题的下一步是使用案例陈述分离四个温度读数。我不太明白该怎么做。我希望能够在给出特定数字1-4时分别获得每个探针的读数。最好的方法是什么?

1 个答案:

答案 0 :(得分:0)

通过直接解析为哈希,我们可以简单地遍历键,或者做任何其他想要对数据结构做的事情。不需要case。 BTW Switch模块已弃用,实际上不应该使用。

#!/usr/bin/env perl

use strict;
use warnings;

use LWP::Simple;

my $content = get('http://temptrax.itworks.com/temp');
my %probes = $content =~ /Probe\s*(\d)\|\s*(\-?[\d\.]+)/g;

foreach my $probe (sort keys %probes) {
  print "$probe => $probes{$probe}\n";
}

正则表达式可以解释(甚至替换):

my %probes = $content =~ /
  Probe\s*      # starts with Probe
  (             # start capture
    \d            # a number (probe)
  )             # end capture
  \|\s*         # separated with a pipe symbol
  (             # start capture
    \-?           # possibly negative
    [\d\.]+       # digits or decimals (at least one)
  )             # end capture
/gx;