Perl - объявлена ​​переменная с 'my', все равно получаю ошибку - PullRequest
2 голосов
/ 18 марта 2019

, поэтому я получаю эту ошибку:

Global symbol "@Z" requires explicit package name 
(did you forget to declare "my @Z"?) at 
C:/Users/owner/Documents/Slic3r/lib/Slic3r/Print/SupportMaterial.pm line 937. Global symbol "@Z" requires explicit package name (did you forget to declare "my @Z"?) at C:/Users/owner/Documents/Slic3r/lib/Slic3r/Print/SupportMaterial.pm line 945

Код:

my ($X_ref,$Y_ref)=grid($min_X,$max_X,$min_Y,$max_Y,$distance);my @X=@$X_ref;my @Y=@{$Y_ref};
for my $i (0..$#X){
    $Z[$i]=20;#The function that defined the height of each point. This setting wil give you a flat roof. For a more advanced tree, try:
    #$Z[$i]=-0.01*$X[$i]**2+0.2*$Y[$i]-0.005*$Y[$i]**2+20;
}

#End of input parameters.

my $min_radian = deg2rad($min_angle);
my $b = tan($min_radian);
my @Z=map{$_/$b} @Z;

После объявления кода «my» для каждой из обнаруженных ошибок:

"my" variable @Z masks earlier declaration in same statement at C:/Users/owner/Documents/Slic3r/lib/Slic3r/Print/SupportMaterial.pm line 945.
"my" variable @Z masks earlier declaration in same statement at C:/Users/owner/Documents/Slic3r/lib/Slic3r/Print/SupportMaterial.pm line 945.
syntax error at C:/Users/owner/Documents/Slic3r/lib/Slic3r/Print/SupportMaterial.pm line 937, near "$Z["

Код:

my ($X_ref,$Y_ref)=grid($min_X,$max_X,$min_Y,$max_Y,$distance);my @X=@$X_ref;my @Y=@{$Y_ref};
for my $i (0..$#X){
    my $Z[$i]=20;#The function that defined the height of each point. This setting wil give you a flat roof. For a more advanced tree, try:
    #$Z[$i]=-0.01*$X[$i]**2+0.2*$Y[$i]-0.005*$Y[$i]**2+20;
}

#End of input parameters.

my $min_radian = deg2rad($min_angle);
my $b = tan($min_radian);
my @Z=map{$_/$b} my @Z;

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

Ответы [ 2 ]

3 голосов
/ 18 марта 2019

Вы объявляете @Z (используя ключевое слово my) в двух разных областях. Один внутри цикла for, а второй потом. Если вам нужно, чтобы @Z продолжал существовать после завершения цикла for, вам необходимо объявить его вне (и до) этой области.

Кроме того, используйте my только один раз:

my @Z;
my ($X_ref,$Y_ref)=grid($min_X,$max_X,$min_Y,$max_Y,$distance);my @X=@$X_ref;my @Y=@{$Y_ref};
for my $i (0..$#X){
    $Z[$i]=20;#The function that defined the height of each point. This setting      wil give you a flat roof. For a more advanced tree, try:
    #$Z[$i]=-0.01*$X[$i]**2+0.2*$Y[$i]-0.005*$Y[$i]**2+20;
}

#End of input parameters.

my $min_radian = deg2rad($min_angle);
my $b = tan($min_radian);
@Z=map{$_/$b} @Z;
0 голосов
/ 19 марта 2019

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

старая школа: мой @Z = (); новая школа: мой $ Z = "";

Это должен быть пропущенный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...