Executing Shell

S

speedster

Hi.
I need some help converting some php to perl.

$meminfo = shell_exec( "free -o" );
I need to execute "free-o" in shell and get the results.
It grabs memory information about a linux webserver.

If it is also possible to run a regular expression on this data that
would also be great.
It then outputs it in a nice format.

Here it is:

preg_match_all("/Mem:\s+?([0-9]+)\s+?([0-9]+)\s+?([0-9]+)\s+?([0-9]+)\s+?([0-9]+)\s+?([0-9]+).*?Swap:\s+?([0-9]+)\s+?([0-9]+)\s+?([0-9]+)/si",$meminfo,$mtype);

array_shift($mtype);

echo("<mem>"."\n");
echo("<total>".$mtype[0][0]."</total>"."\n");
echo("<used>".$mtype[1][0]."</used>"."\n");
echo("<free>".$mtype[2][0]."</free>"."\n");
echo("<shared>".$mtype[3][0]."</shared>"."\n");
echo("<buffers>".$mtype[4][0]."</buffers>"."\n");
echo("<cached>".$mtype[5][0]."</cached>"."\n");
echo("</mem>"."\n");
echo("<swap>"."\n");
echo("<total>".$mtype[6][0]."</total>"."\n");
echo("<used>".$mtype[7][0]."</used>"."\n");
echo("<free>".$mtype[8][0]."</free>"."\n");
echo("</swap>"."\n");
echo("</meminfo>"."\n");


If you can do either bit please give me an example of what I would
write.
(perl shell exec or perl regular expression)

This is the first line of my cgi script. Im not sure if I have to
declare headers or anything. Im new to perl.
This script outputs xml and as php is being turned off on my server I
must convert it to perl.

Thanks alot in advance.
William
 
J

Jim Gibson

speedster said:
Hi.
I need some help converting some php to perl.

Disclaimer: I do not know PHP.
$meminfo = shell_exec( "free -o" );
I need to execute "free-o" in shell and get the results.
It grabs memory information about a linux webserver.

my $meminfo = `free -o`;

If you expect more than one line, then you might want to put the output
into an array:

my @meminfo = `free -o`;
If it is also possible to run a regular expression on this data that
would also be great.

if( $meminfo =~ /regular expression/ ) {
# string in $meminfo matches regular expression
}

You don't say if you want to:

1) just know if it matches or not,
2) extract substrings, or
3) perform substitutions.
It then outputs it in a nice format.

Use print or printf.
Here it is:


preg_match_all("/Mem:\s+?([0-9]+)\s+?([0-9]+)\s+?([0-9]+)\s+?([0-9]+)\s+?([0-9]
+)\s+?([0-9]+).*?Swap:\s+?([0-9]+)\s+?([0-9]+)\s+?([0-9]+)/si",$meminfo,$mtype)
;

my @mtype = ( $meminfo =~ /.../ );

The regular expression (...) should be the same, although I would say
that you can use \d for [0-9], and using ? to set \s+ non-greedy is
useless (and ignored). The captured matches will also be stored in $1,
$2, $3, ...
array_shift($mtype);

echo("<mem>"."\n");
echo("<total>".$mtype[0][0]."</total>"."\n");
echo("<used>".$mtype[1][0]."</used>"."\n");
echo("<free>".$mtype[2][0]."</free>"."\n");
echo("<shared>".$mtype[3][0]."</shared>"."\n");
echo("<buffers>".$mtype[4][0]."</buffers>"."\n");
echo("<cached>".$mtype[5][0]."</cached>"."\n");
echo("</mem>"."\n");
echo("<swap>"."\n");
echo("<total>".$mtype[6][0]."</total>"."\n");
echo("<used>".$mtype[7][0]."</used>"."\n");
echo("<free>".$mtype[8][0]."</free>"."\n");
echo("</swap>"."\n");
echo("</meminfo>"."\n");

You should ensure that the regular expression matches before using the
captured results:

if( @mtype ) {

print "<mem>$mtype[0]\n" .
"<total>$mtype[1]</total>\n" .
"<used>$mtype[2]</used>\n" .
... etc.;
}
If you can do either bit please give me an example of what I would
write.
(perl shell exec or perl regular expression)

This is the first line of my cgi script. Im not sure if I have to
declare headers or anything. Im new to perl.
This script outputs xml and as php is being turned off on my server I
must convert it to perl.

Look into use of CGI.pm module that comes with most Perl distributions.
Most Perl distributions also come with on-line documentation that is
comprehensive and up-to-date, although sometimes finding things may be
difficult. Try:

perldoc perl
perldoc perlintro
perldoc perlre for regular expressions, etc.

This newsgroup is defunct. Try comp.lang.perl.misc in the future. You
should post real code there, and, since you don't know Perl, some
indication of what you are trying to do, not just "please convert this
PHP to Perl for me".

Good luck.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,007
Latest member
obedient dusk

Latest Threads

Top