Perl/Php трансляция

Создал Robert Kline (Последнее обновление: Фев 18, 2005)

 

Массивы
  1. @a = ();
  2.  
  3. @a = ( 'xx', 11, 33.5, );
  4.  
  5. @a = 12..33;
  6.  
  7. $a[2] = 'something';
  8.  
  9. $len = scalar(@a);
  10. # or
  11. $len = @a;
  12.  
  13. @a3 = ('xx', @a1, @a2);
  14.  
  15. ($x, $y) = @a;
  16.  
  17. $a[@a] = 'new'; # push
  18.  
  19.  
  20. foreach $i (@a) { .. }
  1. $a = array();
  2.  
  3. $a = array( 'xx', 11, 33.5, );
  4.  
  5. $a = range(12,33);
  6.  
  7. $a[2] = 'something';
  8.  
  9. $len = count($a);
  10.  
  11.  
  12.  
  13. $a3 = array_merge('xx', $a1, $a2);
  14.  
  15. list($x, $y) = $a;
  16.  
  17. $a[] = 'new'; # push
  18.  
  19.  
  20. foreach ($a as $i) { .. }

 

Хэши
  1. %h = ();
  2.  
  3. %h = ( 'x' => 'y',
  4.        'z' => 'w',
  5.      );
  6.  
  7. $h{'x'} = 7;
  8.  
  9. while (($key,$value) = each(%h))
  10. { .. }
  11.  
  12. $a = keys(%h);
  13. $b = values(%h);
  14.  
  15. delete $h{'x'};
  1. $h = array();
  2.  
  3. $h = array( 'x' => 'y',
  4.             'z' => 'w',
  5.           );
  6.  
  7. $h['x'] = 7;
  8.  
  9. foreach ($h as $key => $value)
  10. { .. }
  11.  
  12. $a = array_keys($h);
  13. $b = array_values($h);
  14.  
  15. unset( $h['x'] );

 

Структура данных
  1. %h = ('a'=>13, 'b'=>25);
  2. @x = ('hi', 'there', 'all',);
  3.  
  4. @mix = ( \%h, \@x,
  5.          [33..39],
  6.          { x=>15, yy=>23, },
  7.        );
  8.  
  9. $mix[0]->{'b'}  # == 25
  10. $mix[0]{'b'}    # == 25
  11. $mix[2]->[2]    # == 35
  12. $mix[2][2]      # == 35
  1. $h = array('a'=>13, 'b'=>25);
  2. $x = array('hi', 'there', 'all',);
  3.  
  4. $mix = array($h, $x,
  5.              range(33,39),
  6.              array('x'=>15, 'yy'=>23),
  7.             );
  8.  
  9. $mix[0]['b']  # == 25
  10.  
  11. $mix[2][2]    # == 35
  12.  

 

Соединие/разбивка массивов
  1. @a = split( '\|', $s );
  2.  
  3. @a = split( '\s+', $s );
  4.  
  5.  
  6. $s = join( '|', @a );
  1. $a = preg_split( '/\|/', $s,
  2.             -1, PREG_SPLIT_NO_EMPTY );
  3. $a = preg_split( '/\s+/', $s,
  4.             -1, PREG_SPLIT_NO_EMPTY );
  5.  
  6. $s = join( '|', $a );

 

Преобразование регистра
  1. $s = lc($s);
  2. $s = uc($s);
  3.  
  4. $s =~ tr/a-z/A-Z/;
  1. $s = strtolower($s);
  2. $s = strtoupper($s);
  3.  
  4.  

 

Сравнение строк
  1. $s1 eq $s2
  2.  
  3.  
  4.  
  5. $s1 lt $s2
  1. strcmp($s1,$s2) == 0
  2. # or
  3. $s1 === $s2
  4.  
  5. strcmp($s1,$s2) < 0

 

Функции
  1. sub foo {
  2.  my @args = @_;
  3. }
  4.  
  5. sub foo {
  6.  $x = 5;
  7. }
  8.  
  9.  
  10.  
  11.  
  12.  
  13. foo2( \@a, \%h );
  1. function foo() {
  2.  $args = func_get_args();
  3. }
  4.  
  5. function foo() {
  6.  global $x;
  7.  $x = 5;
  8. }
  9.  
  10. function foo2($x, $y) {
  11. }
  12.  
  13. foo2( $a, $h );

 

Операции сопоставления строк
  1. $s =~ m/(\w+)/;
  2. $substr = $1;
  3.  
  4. @all = ($s =~ m/(\w+)/g);
  5.  
  6.  
  7. $s =~ s/\s+/X/;
  8. $s =~ s/\s+/X/g;
  9.  
  10. $s =~ s/^\s+|\s+$//g;
  1. preg_match( "/(\w+)/", $s, $match );
  2. $substr = $match[1];
  3.  
  4. preg_match_all( "/(\w+)/", $s, $match );
  5. $all = $match[0];
  6.  
  7. $s = preg_replace( "/\s+/", 'X', $s, 1 );
  8. $s = preg_replace( "/\s+/", 'X', $s );
  9.  
  10. $s = trim($s);

 

Базовое имя/имя каталога
  1. use File::Basename;
  2.  
  3. $b = basename($path);
  4. $d = dirname($path);
  1.  
  2.  
  3. $b = basename($path);
  4. $d = dirname($path);

 

Переменные окружения
  1. %ENV
  2.  
  3. $ENV{REQUEST_METHOD}
  4.  
  5. $ARGV[$i]
  6.  
  7. $0
  1. $_SERVER
  2.  
  3. $_SERVER[REQUEST_METHOD]
  4.  
  5. $argv[$i+1]
  6.  
  7. $argv[0]  # Php/CGI only

 

POST/GET параметры
  1. #form/hyperlink parameters:
  2. # s : single-valued
  3. # m : multi-valued
  4.  
  5. use CGI (:standard);
  6.  
  7.  
  8.  
  9.  
  10. $s = param('s');
  11. @m = param('m');
  12.  
  13. @param_names = param();
  14. $num_params = param();
  1. #form/hyperlink parameters:
  2. # s   : single-valued
  3. # m[] : multi-valued
  4. #       (such as multi-selections
  5. #        and checkbox groups)
  6.  
  7. $PARAM
  8.   = array_merge($_GET, $_POST);
  9.  
  10. $s = $PARAM['s'];  # a scalar
  11. $m = $PARAM['m'];  # an array
  12.  
  13. $param_names = array_keys($PARAM);
  14. $num_params = count($PARAM);

 

HTML элементы
  1. use CGI (:standard);
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9. $ref = "x.cgi";
  10. a({href=>$ref}, "yy")
  11.  
  12. textfield({name=>"yy", size=>5})
  13.  
  14. password({name=>"yy", size=>5})
  15.  
  16. textarea({name=>"yy",
  17.           cols=>5, rows=>2})
  18.  
  19. submit({value=>"yy"})
  20.  
  21. button( {name=>"xx",
  22.          value=>"yy",
  23.          onclick=>"submit()",
  24.         }
  25.       )
  26.  
  27. %labels = (0=>'a',1=>'q',2=>'x');
  28. popup_menu( { name=>"xx",
  29.               values=>[0..2],
  30.               labels=>\%labels,
  31.               size=>4,
  32.             }
  33.           )
  34.  
  35.  
  36. @a = ('xx','yy','zz');
  37. radio_group( { name=>'nn',
  38.                values=> \@a,
  39.                default=>'_',
  40.                linebreak=>1,
  41.              }
  42.            )
  43.  
  44. %labels = ('xx'=>'L1','yy'=>'L2');
  45. @a = keys( %labels );
  46. checkbox_group( { name=>'nn',
  47.                   values=> \@a,
  48.                   labels=> \%labels,
  49.                 }
  50.               )
  51.  
  52. table(
  53.        Tr(
  54.            [
  55.              td(['a','b']),
  56.              td(['x','y']),
  57.            ]
  58.          )
  59.      )
  60.  
  61.  
  1. #Perl/CGI функции имеют дополнительное
  2. #свойство "устойчивости" при повторном
  3. #использовании форм. Значения HTML
  4. #элементов устанавливаются в соответствии
  5. #с входными значениями параметров
  6. #для этих элементов.
  7. #Ниже следующая версия, не стабильна.
  8.  
  9. $ref = "x.php";
  10. <a href="<?php echo $ref?>">yy</a>
  11.  
  12. <input type=text name=yy size=5>
  13.  
  14. <input type=password name=yy size=5>
  15.  
  16. <textarea name=yy cols=5 rows=2>
  17. </textarea>
  18.  
  19.  
  20. <input type="submit" value=yy>
  21.  
  22. <input type="button"
  23.   name="xx" value="yy"
  24.   onclick="submit()">
  25.  
  26.  
  27.  
  28. <select name="xx" size="4">
  29. <?php
  30. $labels = array(0=>'a',1=>'q',2=>'x');
  31. foreach (range(0,2) as $_)
  32.   echo "<option value='$_'>",
  33.        $labels[$_];
  34. ?>
  35. </select>
  36.  
  37. $a = array('xx','yy','zz');
  38. foreach ($a as $_)
  39.   echo "<input type=radio
  40.         name=nn value='$_'>$_<br>";
  41.  
  42.  
  43.  
  44.  
  45. $labels = array('xx'=>'L1','yy'=>'L2');
  46. foreach (array_keys($labels) as $_)
  47.   echo "<input type=checkbox
  48.         name=nn value='$_'>",
  49.          $labels[$_];
  50.  
  51.  
  52.  
  53. <table>
  54. <tr>
  55. <td>a</td><td>b</td>
  56. </tr>
  57. <tr>
  58.  
  59. <td>x</td><td>y</td>
  60. </tr>
  61. </table>

 

Кодирование URL
  1. use URI::Escape;
  2.  
  3. uri_escape($val)
  4. uri_unescape($val)
  1.  
  2.  
  3. urlencode($val)
  4. urldecode($val)

 

Доступ к базе данных MySQL
  1. use DBI;
  2. $dbh = DBI->connect(
  3.   'DBI:mysql:test:localhost',
  4.   $usr,$pwd
  5. );
  6.  
  7. $dbh->do( $sql_op )
  8.  
  9. $query = $dbh->prepare( $sql_op );
  10. $query->execute();
  11.  
  12. while(
  13.  @record = $query->fetchrow() )
  14. { .. }
  15.  
  16.  
  17. $dbh->quote($val)
  1.  
  2.   'localhost', $usr, $pwd
  3. );
  4. mysql_query('USE test')
  5.  
  6. mysql_query( $sql_op );
  7.  
  8. $results = mysql_query( $sql_op );
  9.  
  10.  
  11. while($record =
  12.         mysql_fetch_row($results))
  13. { .. }
  14.  
  15.  
  16. "'" . addslashes($val) . "'"

Источник: http://www.cs.wcupa.edu/~rkline/perl2php/