-3

我目前正在尝试提取和分解包含温度读数的网页的信息。当谈到 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 时,我希望能够分别获得每个探头的读数。最好的方法是什么?

4

1 回答 1

0

通过直接解析成散列,我们可以简单地遍历键,或者对数据结构做任何其他想做的事情。不需要case。顺便说一句,该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;
于 2012-10-25T03:44:37.317 回答