У меня есть небольшая проблема. Как я могу назначить диапазон в массив, как этот:Назначение диапазона массиву в Perl
входного файла: clktest.spf
*
.GLOBAL vcc! vss!
*
.SUBCKT eclk_l_25h brg2eclk<1> brg2eclk<0> brg_cs_sel brg_out brg_stop cdivx<1>
+ eclkout1<24> eclkout1<23> eclkout1<22> eclkout1<21> eclkout1<20> eclkout1<19>
+ mc1_brg_dyn mc1_brg_outen mc1_brg_stop mc1_div2<1> mc1_div2<0> mc1_div3p5<1>
+ mc1_div3p5<0> mc1_div_mux<3> mc1_div_mux<2> mc1_div_mux<1> mc1_div_mux<0>
+ mc1_gsrn_dis<0> pclkt6_0 pclkt6_1 pclkt7_0 pclkt7_1 slip<1> slip<0>
+ ulc_pclkgpll0<1> ulc_pclkgpll0<0> ulq_eclkcib<1> ulq_eclkcib<0>
*
*Net Section
*
*|GROUND_NET 0
*
*|NET eclkout3<48> 2.79056e-16
*|P (eclkout3<48> X 0 54.8100 -985.6950)
*|I (RXR0<16>#NEG RXR0<16> NEG X 0 54.2255 -985.6950)
C1 RXR0<16>#NEG 0 5.03477e-17
C2 eclkout3<48> 0 2.28708e-16
Rk_6_1 eclkout3<48> RXR0<16>#NEG 0.110947
выход (это должно быть сохранено значение в массиве)
.SUBCKT eclk_l_25h brg2eclk<1> brg2eclk<0> brg_cs_sel brg_out brg_stop cdivx<1>
+ eclkout1<24> eclkout1<23> eclkout1<22> eclkout1<21> eclkout1<20> eclkout1<19>
+ mc1_brg_dyn mc1_brg_outen mc1_brg_stop mc1_div2<1> mc1_div2<0> mc1_div3p5<1>
+ mc1_div3p5<0> mc1_div_mux<3> mc1_div_mux<2> mc1_div_mux<1> mc1_div_mux<0>
+ mc1_gsrn_dis<0> pclkt6_0 pclkt6_1 pclkt7_0 pclkt7_1 slip<1> slip<0>
+ ulc_pclkgpll0<1> ulc_pclkgpll0<0> ulq_eclkcib<1> ulq_eclkcib<0>
*
*Net Section
мой простой код:
#!/usr/bin/perl
use strict;
use warnings;
my $input = "clktest.spf";
open INFILE, $input or die "Can't open $input" ;
my @allports;
while (<INFILE>){
@allports = /\.SUBCKT/ ... /\*Net Section/ ;
print @allports;
}
Я выполняю правильную работу по назначению выбранного диапазона в массив? Если нет, то как я могу изменить этот код?
Спасибо за продвижение.
Что означает '. */$ 1' в вашем регулярном выражении? И на ваш сплит-код, действительно ли это '¥ n'? – Meeyaw
'. *' Before '(' и after') 'означает ненужную часть. '$ 1' будет содержать строку между ними. – tivn
Спасибо за ответ. Для последующего наблюдения, как только я нашел раздел файла, я сделаю что-то вроде этого: $ contents = ~ tr /\\\\\\\\\; d; $ contents = ~ s/SUBCKT //; $ contents = ~ s/Net Section //; @ports = split ('', $ contents); Могу ли я сделать что-то меньшее, чем это? – Meeyaw