/ / Защо chomp ($ Array [0]) ще изтрие някои низ, съдържащ се в $ Array [0]? - перл

Защо chomp ($ Array [0]) ще изтрие съдържанието на низ в $ Array [0]? - perl

Имам входен файл, който изглежда така

1a0i b.40.4.6 1a49 b.58.1.1 1a82 c.37.1.10 1atp d.144.1.7 , , , ,

Problem1

Слагам всеки ред в @Array

когато използвам

$Line = chomp($Array[0]);
print $Line;

покажете изхода на екран 1

but When I use
$Line = $Array[0];
print $Line;

покажете изхода на екран 1a0i b.40.4.6

Защо chomp ще позволи на $ Line да остане само един символ?


Problem2

Искам да използвам b.40 като име на файл, така че тук това е моят код

$ Array [0] е 1a0i b.40.4.6

$Line = $Array[0];
@Element = split(" ",$Line);
@Tiny_element = split(".",$Element[1]);
$File_name = join(".",splice(@Tiny_element,0,2));

но отпечатвам $ File_name, но не показва нищо, аз използвам Dumper @Tiny_element , но се показва празно аз print $Element[1] , показва b.40.4.6, аз използвам index($Element[1],".") тя показва 1, така че знам, че съдържа ". но не може „да се раздели с“.

опитвам split(".",$Element[1]) ; split(".",$Element[1]) преди, но все още не решавам ....

Какво не е наред с това?

Благодаря

Отговори:

2 за отговор № 1

Отговор на проблем 1:

Употреба:

chomp($Array[0]);
$Line = $Array[0];

вместо:

$Line = chomp($Array[0]);

Това е, защото възвръщаемата стойност на chomp не е низът, а броят на последните символи, премахнати от низ.

Отговор на проблем 2

$File_name = $1 if ($Line =~ /s([^.]+.[^.]+)/);

3 за отговор № 2

Може би бихте могли да опитате да прочетете документацията за функция, която използвате, а не просто да гадаете за нейното поведение.

Най- документация за chomp казва следното:

Той връща общия брой знаци, отстранени от всичките му аргументи

Низът е редактиран на място.


1 за отговор № 3

За втория ви проблем, ако бих искал да изясня кода ви, като променя първия параметър на разделените извлечения, както следва:

 $Line = $Array[0];
@Element = split(/ /,$Line);
@Tiny_element = split(/./,$Element[1]);
$File_name = join(".",splice(@Tiny_element,0,2));

и ви напомня това . е символ на заместващи символи в регулярни изрази, по-добре ли ще разберете грешката си?

BTW: /[.]/ е чудесен регекс за намиране на буквални периоди.