Perl para entendedores de PHP

by

Caminhando e cantando pela web, no meu inicio de aprendizado, descobrir uma ótima página que faz comparações entre PHP e Perl no sentido de Sintaxe. Eu como um humilde desenvolvedor PHP fiquei maravilhado por conseguir realmente entender o que o Perl queria me dizer com algumas sintaxes.

Bem, chega de enrrolação, segue abaixo as traduções Perl-PHP:

— Perl arrays — Php arrays
@a = ();

@a = ( 'xx', 11, 33.5, );

@a = 12..33;

$a[2] = 'something';

$len = scalar(@a);
# or
$len = @a;

@a3 = ('xx', @a1, @a2);

($x, $y) = @a;

$a[@a] = 'new'; # push

push
pop
shift
unshift
splice

foreach $i (@a) { .. }
$a = array();

$a = array( 'xx', 11, 33.5, );

$a = range(12,33);

$a[2] = 'something';

$len = count($a);

$a3 = array_merge('xx', $a1, $a2);

list($x, $y) = $a;

$a[] = 'new'; # push

array_push
array_pop
array_shift
array_unshift
array_splice

foreach ($a as $i) { .. }

— Perl hashes — Php hashes
%h = ();

%h = ( 'x' => 'y',
       'z' => 'w',
     );

$h{'x'} = 7;

while (($key,$value) = each(%h))
{ .. }

$a = keys(%h);
$b = values(%h);

delete $h{'x'};
$h = array();

$h = array( 'x' => 'y',
            'z' => 'w',
          );

$h['x'] = 7;

foreach ($h as $key => $value)
{ .. }

$a = array_keys($h);
$b = array_values($h);

unset( $h['x'] );

— Perl data structures — Php data structures
%h = ('a'=>13, 'b'=>25);
@x = ('hi', 'there', 'all',);

@mix = ( \%h, \@x,
         [33..39],
	 { x=>15, yy=>23, },
       );

$mix[0]->{'b'}  # == 25
$mix[0]{'b'}    # == 25
$mix[2]->[2]    # == 35
$mix[2][2]      # == 35
$h = array('a'=>13, 'b'=>25);
$x = array('hi', 'there', 'all',);

$mix = array($h, $x,
	     range(33,39),
	     array('x'=>15, 'yy'=>23),
	    );

$mix[0]['b']  # == 25

$mix[2][2]    # == 35

— Perl array split/join — Php array split/join
@a = split( '\|', $s );

@a = split( '\s+', $s );

$s = join( '|', @a );
$a = preg_split( '/\|/', $s,
            -1, PREG_SPLIT_NO_EMPTY );
$a = preg_split( '/\s+/', $s,
            -1, PREG_SPLIT_NO_EMPTY );

$s = join( '|', $a );

— Perl case conversion — Php case conversion
$s = lc($s);
$s = uc($s);

$s =~ tr/a-z/A-Z/;
$s = strtolower($s);
$s = strtoupper($s);

— Perl string comparisons — Php string comparisons
$s1 eq $s2

$s1 lt $s2
strcmp($s1,$s2) == 0
# or
$s1 === $s2

strcmp($s1,$s2) < 0

— Perl functions — Php functions
sub foo {
 my @args = @_;
}

sub foo {
 $x = 5;
}

foo2( \@a, \%h );
function foo() {
 $args = func_get_args();
}

function foo() {
 global $x;
 $x = 5;
}

function foo2($x, $y) {
}

foo2( $a, $h );

— Perl string matching operations — Php string matching operations
$s =~ m/(\w+)/;
$substr = $1;

@all = ($s =~ m/(\w+)/g);

$s =~ s/\s+/X/;
$s =~ s/\s+/X/g;

$s =~ s/^\s+|\s+$//g;
preg_match( "/(\w+)/", $s, $match );
$substr = $match[1];

preg_match_all( "/(\w+)/", $s, $match );
$all = $match[0];

$s = preg_replace( "/\s+/", 'X', $s, 1 );
$s = preg_replace( "/\s+/", 'X', $s );

$s = trim($s);

— Perl basename/dirname — Php basename/dirname
use File::Basename;

$b = basename($path);
$d = dirname($path);
$b = basename($path);
$d = dirname($path);

— Perl environment variables — Php environment variables
%ENV

$ENV{REQUEST_METHOD}

$ARGV[$i]

$0
$_SERVER

$_SERVER[REQUEST_METHOD]

$argv[$i+1]

$argv[0]  # Php/CGI only

— Perl POST/GET parameters — Php POST/GET parameters
#form/hyperlink parameters:
# s : single-valued
# m : multi-valued

use CGI (:standard);

$s = param('s');
@m = param('m');

@param_names = param();
$num_params = param();
#form/hyperlink parameters:
# s   : single-valued
# m[] : multi-valued
#       (such as multi-selections
#        and checkbox groups)

$PARAM
  = array_merge($_GET, $_POST);

$s = $PARAM['s'];  # a scalar
$m = $PARAM['m'];  # an array

$param_names = array_keys($PARAM);
$num_params = count($PARAM);

— Perl HTML elements — Php HTML elements
use CGI (:standard);

$ref = "x.cgi";
a({href=>$ref}, "yy")

textfield({name=>"yy", size=>5})

password({name=>"yy", size=>5})

textarea({name=>"yy",
	  cols=>5, rows=>2})

submit({value=>"yy"})

button( {name=>"xx",
	 value=>"yy",
         onclick=>"submit()",
        }
      )

%labels = (0=>'a',1=>'q',2=>'x');
popup_menu( { name=>"xx",
              values=>[0..2],
              labels=>\%labels,
              size=>4,
	    }
          )

@a = ('xx','yy','zz');
radio_group( { name=>'nn',
               values=> \@a,
               default=>'_',
               linebreak=>1,
	     }
           )

%labels = ('xx'=>'L1','yy'=>'L2');
@a = keys( %labels );
checkbox_group( { name=>'nn',
                  values=> \@a,
		  labels=> \%labels,
	        }
              )

table(
       Tr(
           [
	     td(['a','b']),
             td(['x','y']),
	   ]
         )
     )
# The Perl/CGI functions have the
# additional property of "stability"
# when used in reentrant forms.
# The values of the HTML elements are
# set according to the incoming
# parameter values for those elements.
# The versions below are not stable.

$ref = "x.php";
<a href="<?php echo $ref?>">yy</a>

<input type=text name=yy size=5>

<input type=password name=yy size=5>

<textarea name=yy cols=5 rows=2>
</textarea>

<input type="submit" value=yy>

<input type="button"
  name="xx" value="yy"
  onclick="submit()">

<select name="xx" size="4">
<?php
$labels = array(0=>'a',1=>'q',2=>'x');
foreach (range(0,2) as $_)
  echo "<option value='$_'>",
       $labels[$_];
?>
</select>

$a = array('xx','yy','zz');
foreach ($a as $_)
  echo "<input type=radio
         name=nn value='$_'>$_<br>";

$labels = array('xx'=>'L1','yy'=>'L2');
foreach (array_keys($labels) as $_)
  echo "<input type=checkbox
         name=nn value='$_'>",
         $labels[$_];

<table>
<tr>
<td>a</td><td>b</td>
</tr>
<tr>
<td>x</td><td>y</td>
</tr>
</table>

— Perl URL encode — Php URL encode
use URI::Escape;

uri_escape($val)
uri_unescape($val)
urlencode($val)
urldecode($val)

— Perl MySQL — Php MySQL
use DBI;
$dbh = DBI->connect(
  'DBI:mysql:test:localhost',
  $usr,$pwd
);

$dbh->do( $sql_op )

$query = $dbh->prepare( $sql_op );
$query->execute();

while(
 @record = $query->fetchrow() )
{ .. }

$dbh->quote($val)
$dbh = mysql_connect(
  'localhost', $usr, $pwd
);
mysql_query('USE test')

mysql_query( $sql_op );

$results = mysql_query( $sql_op );

while($record =
        mysql_fetch_row($results))
{ .. }

"'" . addslashes($val) . "'"

Tendo conhecimento em PHP, este “guia” acima dá um esclarescimento para entender alguns códigos em Perl.

Caminho longo…, e viva o PHP! \o/

Rafael S.

Referência: http://www.cs.wcupa.edu/~rkline/perl2php/

Anúncios

Uma resposta to “Perl para entendedores de PHP”

  1. Lawrence Lagerlof Says:

    Nossa, que achado! É uma excelente referência.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s


%d blogueiros gostam disto: