해시가 연결된 개체와 관련된 함수에 액세스 할 수 있도록 스크립트의 초기 단계 인 하위 루틴에 대해 "묶음"을 호출해야하는 내 스크립트에서 작은 문제가있는 것 같습니다. . 문제는 "Cbc_encrypt_test.pl 라인 30에서 unblessed reference에"SetWriteMode "메서드를 호출 할 수 없다는 오류를 반환하는 스크립트를 실행하려고 할 때입니다." 처음에 나는 그것이 무슨 말을하고 있는지 전혀 몰랐다. 문제는 내가 처음부터 해시 참조를 반환하는 서브 루틴을 가리키는 참조를 사용했기 때문이라고 생각한다. 왜냐하면 지금까지는 "config_file = \ % cfg"를 이해하고 있기 때문입니다. Perlref에 대해 perldoc을 본 후에 나는 아직도 길을 잃었다. 나는이 문서를 꽤 잘 읽고 내가 필요로하는 방식으로 서브 루틴을 참조하는 것에 대해서는 아무것도 보지 못했다.서브 루틴에 "묶어"사용하는 방법은 무엇입니까?
여기까지 전체 스크립트.
#!/usr/bin/perl
use strict;
use warnings;
use Term::ANSIColor;
use Config::IniFiles;
use Crypt::CBC;
start_script();
sub start_script {
system ("clear");
encrypt_password();
} # end start_script
sub config_file {
my $cfg_file = 'settings.ini';
my %cfg;
tie %cfg, 'Config::IniFiles', (-file => "$cfg_file");
return \%cfg;
} # end config_file
sub encrypt_password {
my $password = config_file()->{ESX}{password};
my $cipher = Crypt::CBC->new(-key => 'EF1FAD9B87F8365B242669E624FEB36CDBCCFEE0096CC45DDDCF6F5995E83F61',
-cipher => 'Rijndael'
);
my $encrypted_password = $cipher->encrypt_hex("$password");
chomp $encrypted_password;
config_file()->{ESX}{password} = $encrypted_password;
tied config_file()->SetWriteMode(0666);
tied config_file()->RewriteConfig();
return $encrypted_password;
} # end encrypt_password
B :: Deparse 란 무엇입니까? CPAN 모듈? – ianc1215
'B :: Deparse'는 이미 설치 한 핵심 모듈입니다. 위의 사용법에서 Perl은'-e' 줄을 취하여 컴파일 한 다음 op-tree를 Perl 소스 코드로 다시 변환하는'B :: Deparse'에 컴파일 된 op-tree를 전달합니다. '-p' 옵션은 암묵적으로 괄호를 삽입하도록 deparse에 지시합니다. –
다른 질문에서 캐싱에 관한 부분을 놓쳐 버렸을 것입니다. 위의 솔루션은 작동하지만 지금은 설정 모듈이 실제로 비밀번호를 쓰지 않고 있다는 사실을 알게되어서 나보다 앞서 즐거움을 얻습니다. – ianc1215