Boston Linux & Unix (BLU) Home | Calendar | Mail Lists | List Archives | Desktop SIG | Hardware Hacking SIG
Wiki | Flickr | PicasaWeb | Video | Maps & Directions | Installfests | Keysignings
Linux Cafe | Meeting Notes | Blog | Linux Links | Bling | About BLU

BLU Discuss list archive


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Perl question



On Wed, May 21, 2003 at 04:52:40PM -0400, Eric Schwartz wrote:
> I have a perl programing question, any help you guys could offer would be 
> greatly appreciated.

> I am trying to search an HTML page for specific data.  I have bolded the 
> text that I want to separate.  The problem is that the next piece of HTML 
> after this is for Cyan cartridge.  And I want to save BLACK CARTRIDGE: 
> Estimated pages Remaining: 6798, then after that do the Cyan and so 
> forth.  I don't know how to modify the code you wrote for me, to save Black 
> Cartridge, then save estimated pages remaining and the number after it, 
> without confusing it for the "cyan" estimated pages remaining.  I hope this 
> question is not too confusing, as I am new to programing, I appreciate all 
> your help.  Thanks again

So this is code that you didn't write yourself, that you are trying to
modify?

OK. I strongly recommend you start by buying a copy of "Learning Perl"
from O'Reilly, and after that a copy of "Programming Perl". 

Next, always "use strict;".

Next, always enable warnings by invoking the perl interpreter with -w.

> Here is a piece of the perl that I am using, and does not seem to be 
> working.  Remember I need to pull all of the bolded stuff in order.
> 
> $buffer = get('http://ipaddress);

This won't work. There are unbalanced quotes. And do you define &get
somewhere?

> print "\nHP 4600 PRINTER STATUS\n\n";

This will print a string.

> ($etapagerem) = $buffer

1. There's no semicolon at the end of this statement.
2. You are assigning a scalar to a list containing exactly one scalar,
   which won't work because a scalar is not a list.

>         =~ /BLACK CARTRIDGE\s*(?:<.*?>\s*)/s;

Assuming you are continuing from the last line, you appear to be
confused as to what constitutes a regexp. "man perlre" will explain them
to you, if you read it carefully.

> print "Estimated Pages Remaining: $etapagerem\n";

This prints a string with an interpolated scalar.; I have no idea what
the contents of that var will be.

May I suggest that what you really want is something along the lines of
this pseudoperlcode:
----
@httppage = `wget http://ipaddress`;

foreach my $line in @httppage {
	if ($line =~ /a good regex/) {$black = $1};
	if ($line =~ /another regex/) {$green = $1};
	if ($line =~ /yetanother regex/) {$red = $1};
	if ($line =~ /someother regex/) {$blue = $1};
	if ($line =~ /some regex/) {$pagecount = $1};
};

print "Black percentage: $black \n";
print "Red percentage: $red \n";
print "Blue percentage: $blue \n";
print "Green percentage: $green \n\n";
print "Estimated pages left: $pagecount \n";
----

-dsr-

-- 
Network engineer / pre-sales engineer available in the Boston area.
http://tao.merseine.nu/~dsr




BLU is a member of BostonUserGroups
BLU is a member of BostonUserGroups
We also thank MIT for the use of their facilities.

Valid HTML 4.01! Valid CSS!



Boston Linux & Unix / webmaster@blu.org