2017-02-17 9 views
1

У меня есть строка, которая разделяется полными остановками, и я хочу использовать отдельные элементы в качестве переменных.Разделите строку Perl полной остановкой и используйте элементы как переменные

Например, если у меня есть

$string = "This.is.a.string"; 

Когда я говорю

print $1; 

Я хочу, чтобы это выход "Это", или печать $ 2 выход будет "есть" и т.д.

Я пробовал

$elements = split(/\\./, $string); 
print $1; 

но пока не повезло.

Есть ли у кого-нибудь идеи, как это сделать?

+3

Почему вы ** хотите ** '$ 1' вместо элементов массива? – jm666

ответ

2

Должно быть:

@elements = split(/\./, $string); print $elements[0]; 

@elements является массивом и $elements[0] является первым элементом этого массива.

+1

Вы вводите в заблуждение списки и массивы. '@' - это сигила для массива. –

+0

@MattJacob В perl список и массив - это одно и то же, я всегда называл списки. –

+0

@EssexBoy Список и массив - это не одно и то же. Вы можете назначить список массиву (или хешу), но список сильно отличается. «Split» возвращает список, а затем вы назначаете его массиву. См. [This] (http://friedo.com/blog/2013/07/arrays-vs-lists-in-perl) – stevieb

4
use strict; 
use warnings; 

my $string = "This.is.a.string"; 
my @output = split /\./, $string; 

print $output[0]; # this will print 'this' where $output[1] will print 'is' 

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

use strict; 
use warnings; 

my $string = "This.is.a.string"; 
$string =~ s/\./ /g; 

print $string; # this will print 'This is a string' 

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

split /\\./, $string; 

расколе образуют между два слэша, но специальные символы должны быть замаскирована обратной косой чертой, вы в настоящее время избежать обратной косой черты, а не точка. это должно быть

split /\./, $string; 

Во-вторых, вы не определили $ 1, так что он не знает, что такое $ 1. если вы хотите использовать его в своей строке, вам нужно будет сказать, что такое $ 1.

use strict; 
use warnings; 

my $string = "This.is.a.string"; 
my @output = split /\./, $string; 

$1 = $output[1]; 
print $1; 

, но это необязательно, просто показывая вам проблему.

 Смежные вопросы

  • Нет связанных вопросов^_^