LINUX.ORG.RU

perl. Конкатенация строк

 


0

1

Всем привет!

Почему вот такой код выдает на экране дичь?

my $temp=@all_str_m[$a-5];
$temp=~s/ /\\ /;
$temp=~s/,//;
"regions_stat/".$temp."/full/man/\n"

на выходе вот так:

/full/man/at/Российская\ Федерация

Как будто перл не понимает, куда ему надо пристыковывать строки и перезаписывает значение.

★★

Ответ на: комментарий от joy4eg

Perl 5.20.2 при включенных варнингах сказал, что он понял, что я написал, но так лучше не делать. после исправления ничего не поменялось.

aido ★★
() автор топика
Ответ на: комментарий от aido

Покажи минимальный рабочий пример кода, который, по твоему мнению, работает не правильно.
Т.к. Я у себя твою проблему воспроизвести не смог.

joy4eg ★★★★★
()
Ответ на: комментарий от joy4eg
#!/usr/bin/perl
use strict;
use warnings;
use 5.20.2;
open my $file_m, '<', $ARGV[0] or die "Невозможно открыть файл: $!\n";
open my $file_w, '<', $ARGV[1] or die "Невозможно открыть файл: $!\n";

mkdir "regions_stat";
my $num_str_m;
my @num_str_array_m;
my @all_str_m;

while(<$file_m>)
{
	chomp;
	if (/^0,/)#нужно для дальнейшей разбивки файла
	{
		push(@num_str_array_m, $num_str_m);
	}
	$num_str_m++;
	push(@all_str_m, $_);
}

close $file_m;

foreach $a (@num_str_array_m)
{
	my $temp=$all_str_m[$a-5];
	$temp=~s/ /\\ /;
	$temp=~s/,//;
	#printf $temp;
	$temp="regions_stat/$temp";
	print "$temp\n";
	$temp="$temp/full/man/";
	print "$temp\n";
}
aido ★★
() автор топика
Ответ на: комментарий от aido
#!/usr/bin/perl
use strict;
use warnings;
use 5.20.2;
use open ':encoding(utf8)';

binmode(STDOUT,':utf8');
open my $file_m, '<', "ff.txt" or die "Невозможно открыть файл: $!\n";


while(<$file_m>)
{
	chomp;
	s/ /\\ /g;
	s/,//g;
	say join( '/' => ("regions_stat",  $_, "full", "man/"));
}

close $file_m;
joy4eg ★★★★★
()
Ответ на: комментарий от aido

А должно, во всяком случае у меня на v5.22.1 все работает ОК.

use open ':encoding(utf8)';

Это открывает файлы в нужной кодировке. Возможно, у тебя она другая.

joy4eg ★★★★★
()
Ответ на: комментарий от aido

Минимально изменил твой сорец, убрал лишнее, добавил инициализацию счётчика :). Вобщем смотри вокуг ## Результат - всё аж шуршит под Debian 8 Jessie, perl:This is perl 5, version 20, subversion 2 (v5.20.2) built for x86_64-linux-gnu-thread-multi Но код всё одно очень, много движений для ничего - это в продакшен нельзя! Продолжай работать над собой.

#!/usr/bin/perl
use strict;
use warnings;
use 5.20.2;
open my $file_m, '<', $ARGV[0] or die "Невозможно открыть файл: $!\n";
##open my $file_w, '<', $ARGV[1] or die "Невозможно открыть файл: $!\n";

##mkdir "regions_stat";
##my $num_str_m;
my $num_str_m = 1;
my @num_str_array_m;
my @all_str_m;

while(<$file_m>)
{
	chomp;
	##if (/^0,/)#нужно для дальнейшей разбивки файла
	##{
		push(@num_str_array_m, $num_str_m);
	##}
	$num_str_m++;
	push(@all_str_m, $_);
}

close $file_m;

foreach $a (@num_str_array_m)
{
	my $temp=$all_str_m[$a-5];
	$temp=~s/ /\\ /;
	$temp=~s/,//;
	#printf $temp;
	$temp="regions_stat/$temp";
	##print "$temp\n";
	print "$temp    [$a]\n";
	$temp="$temp/full/man/";
	print "$temp\n";
}

anonymous
()
Ответ на: комментарий от disarmer

ты оказался прав. это было решением.

aido ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.