в поле "input type="text"" вводятся символы "か.れ.る"
разделенные точкой
в итоге строка вызова скрипта выглядит так:
cgi/find?ja_str=%E3%81%8B.%E3%82%8C.%E3%82%8B
далее скрипт кладет все символы в массив @b.
содержимое которого получается: @b=(か,れ,る);
далее в скрипте идет код:
Код: Выделить всё
...
print "<p>otdelno:";
while($i<$num){
print "[$b[$i]]";
$i++;
}
print "<p>vmeste:";
print "(@b)<p>";
...который выводит 2 строки:
otdelno:[か][れ][る]
vmeste:(か れ る)
здесь все в порядке
далее идет код:
$b[2]=chr(12427);
изменено значение 2-го символа,цифра "12427" означает код того самого 3-го символа "る"
далее в скрипте опять идет код:
Код: Выделить всё
...
print "<p>otdelno:";
while($i<$num){
print "[$b[$i]]";
$i++;
}
print "<p>vmeste:";
print "(@b)<p>";
...который выводит 2 строки:
otdelno:[か][れ][る]
vmeste:(г�‹ г‚Œ る) <----- !!!!!
видно что при выводе посимвольно (print "[$b[$i]]";) строка не изменилась, а при выводе всего массива (rint "(@b)<p>";) строка
выглядит не так как должна. Изменен был всего один символ $b[2] причем на тот же самый только изначально массив был заполнен через параметры переданные скрипту, а потом всего один элемент изменен через функцию chr(12427); присваивание значения из функции chr(12427); портит строку.
что стало со строкой а главное как правильно менять содержимое?
Код: Выделить всё
#!/usr/bin/perl
use strict;
use bytes();
use CGI qw(:standard escapeHTML);
print "Content-type: text/html\n\n";
print '<html>
<head>
<base href="http://s2/ja/">
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>
</head>
<body rightmargin=50 leftmargin=50 bgcolor="dde1c2">
<center>
';
my $str = param('ja_str');
my @b=split(/\./,$str);
my $num=scalar(@b);
parse();
sub parse()
{
my $i=0;
my $temp_b2;
$i=0;
print "<p>===== 1 =====<p>";
print "<p>otdelno:";
while($i<$num){
print "[$b[$i]]";
$i++;
}
print "<p>vmeste:";
print "(@b)<p>";
print "<p>===== 2 =====<p>";
$temp_b2=$b[2];
$b[2]=chr(12427);
print "<p>otdelno:";
$i=0;
while($i<$num){
print "[$b[$i]]";
$i++;
}
print "<p>vmeste:";
print "(@b)<p>";
print "<p>===== 3 =====<p>";
$b[2]=$temp_b2;
print "<p>otdelno:";
$i=0;
while($i<$num){
print "[$b[$i]]";
$i++;
}
print "<p>vmeste:";
print "(@b)<p>";
print "</pre></body></html>";
}