Migra de Php a Perl o viceversa

Por el 4 de marzo de 2007

en: Diseño|Programacion

Hoy en día Php es uno de los lenguajes web más populares, y los programadores que hoy trabajan con PHP están considerando seriamente migrar a Ruby on Rails como una opción para próximos proyectos, y si no lo están considerando posiblemente lo consideraran en un futuro.

Hace seis años Perl era el indiscutible lider dentro de los lenguajes de programación orientados al desarrollo de aplicaciones web. Python, Ruby y otros lenguajes estaban empezando, pero sin embargo hoy en día podríamos decir que Perl esta muriendo, muchos dirán pues “que se muera” y sin embargo otros dirán “muérete tú”… un dato que tenemos que tener en cuenta es que PHP nació gracias a Perl y hay que decir que hay muchos aspectos en los que son muy parecidos, por lo tanto es inutil crear una discusión sobre cúal es mejor porque eso es muy relativo, ha aquellos que digán que Perl no sirve para nada les recomiendo hacer un script en perl y otro php que recorra un listado de 1.000.000 de lineas, y calcule el tiempo que tarda cada uno en devolver el resultado, con ese ejemplo bastará para apreciar la potencia de un lenguaje que fue innovador y precursor de otros lenguajes como PHP.

En definitiva que los diferentes lenguajes van evolucionando cómo muestra esta imagen:


Y si vais a cambiar de lenguaje que mejor que una guía para poder migrar más facilmente… Por eso aquí os dejo esta guía para migrar tus scripts de Php a Perl y viceversa.

Guía para migrar de Php a Perl y viceversa



— Perl arrays

— Php arrays

@a = ();

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

@a = 12..33;

$a[2] = 'algo';

$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] = 'algo';

$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 Estructuras de Datos — Php Estructuras de Datos
%h = ('a'=>13, 'b'=>25);
@x = ('hola', 'alli', 'todos',);

@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('hola', 'alli', 'todos',);

$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 Conversión de Palabras

— Php Conversión de Palabras
$s = lc($s);
$s = uc($s);

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



— Perl Comparacion de Cadenas — Php Comparacion de Cadenas
$s1 eq $s2

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

strcmp($s1,$s2) < 0



— Perl Funciones — Php Funciones
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 Operaciones con cadenas

— Php Operaciones con cadenas

$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 Variables de entorno — PhpVariables de entorno
%ENV

$ENV{REQUEST_METHOD}

$ARGV[$i]

$0
$_SERVER

$_SERVER[REQUEST_METHOD]

$argv[$i+1]

$argv[0]  # Php/CGI only



— Perl POST/GET parametros — Php POST/GET parametros
#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 Elementos HTML

— Php Elementos HTML
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 Acceso a Bases de datos

— PhpMySQL Acceso a Bases de datos

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) . "'"

Guía para migrar de Php a Perl y viceversa

Enlaces Relacionados

Generar passwords accesibles con Php
Codigo Fuente del generador de passwords en PHP
Ejemplo de ejecución del script
PHP y MySql una estrecha relación
5 cosas que no sabías hacer con PHP
Generar documentos OpenOffice con PHP
Nueva versión de Notepad++
Hola Mundo!
Identificar las consultas más lentas de MySql
Crea sencillas gráficas con MySql
Programar un script PHP para saber quién está en línea
Consejos para optimizar PHP
Editando en Opera páginas web en tiempo real

Dejar un comentario