Perl의 과부하가있을 수 있습니까? (그리고 넥타이를 사용하는 동안 문제)

StackOverflow https://stackoverflow.com/questions/1483418

문제

나는 넥타이를 사용하고 이것을 찾기로 선택합니다.

package Galaxy::IO::INI;
sub new {
    my $invocant = shift;
    my $class = ref($invocant) || $invocant;
    my $self = {']' => []}; # ini section can never be ']'
    tie %{$self},'INIHash';
    return bless $self, $class;
}

package INIHash;
use Carp;
require Tie::Hash;

@INIHash::ISA = qw(Tie::StdHash);

sub STORE {
    #$_[0]->{$_[1]} = $_[2];
    push @{$_[0]->{']'}},$_[1] unless exists $_[0]->{$_[1]};
    for (keys %{$_[2]}) {
        next if $_ eq '=';
        push @{$_[0]->{$_[1]}->{'='}},$_ unless exists $_[0]->{$_[1]}->{$_};
        $_[0]->{$_[1]}->{$_}=$_[2]->{$_};
    }
    $_[0]->{$_[1]}->{'='};
}

마지막 "$"를 제거하면[0]->{$1]}-> { '='}; ", 그것은 올바르게 작동하지 않습니다. 왜?

반품 값이 필요하다는 것을 알고 있습니다. 그러나 "$[0]->{$1]}; "올바르게 작동 할 수없고 $[0]->{$1]}-> { '='}는 모든 것이 아닙니다.


오래된 게시물 :

INI 파일을 구문 분석하기 위해 Perl에 패키지를 작성합니다. 그냥 기반으로 뭔가 Config::Tiny.

섹션 및 키의 순서를 유지하고 싶으므로 추가 배열을 사용하여 순서를 저장합니다.

하지만 내가 사용할 때 " $Config->{newsection} = { this => 'that' }; # Add a section ", 나는 과부하가 필요하다"="뉴스"와 "이"는 배열에서 밀 수 있습니다.

이것이 가능합니까 "$Config->{newsection} = { this => 'that' };"다른 부분에 영향을 미치지 않고 작동합니까?

코드의 일부는 다음과 같습니다.

sub new {
    my $invocant = shift;
    my $class = ref($invocant) || $invocant;
    my $self = {']' => []}; # ini section can never be ']'
    return bless $self, $class;
}
sub read_string {
    if ( /^\s*\[\s*(.+?)\s*\]\s*$/ ) {
        $self->{$ns = $1} ||= {'=' => []};  # ini key can never be '='
        push @{$$self{']'}},$ns;
        next;
    }
    if ( /^\s*([^=]+?)\s*=\s*(.*?)\s*$/ ) {
        push @{$$self{$ns}{'='}},$1 unless defined $$self{$ns}{$1};
        $self->{$ns}->{$1} = $2;
        next;
    }
}
sub write_string {
    my $self = shift;
    my $contents = '';
    foreach my $section (@{$$self{']'}}) {
}}
도움이 되었습니까?

해결책

이것은 정확히 연산자 과부하가 아니라,이 기능이 절대적으로 필요한 경우 Perl Tie를 시도 할 수 있습니다.http://perldoc.perl.org/functions/tie.html

다른 팁

과부하를위한 특수 기호 '='에 대한 Perl Overloading의 동작을 나열합니다.

"="의 값은 세 가지 인수가있는 함수에 대한 참조입니다. 그러나 Perl 할당 연산자에 과부하가 걸리지 않습니다. 이것은 낙타 머리카락에 맞서게 될 것입니다.

따라서 접근 방식을 다시 생각해야 할 것입니다.

당신은 알고 있습니까? config :: inifiles? 당신은 당신이 떠나기 전에 그것을 재발 명하기 전에 그것을 고려할 수 있습니다. 적절한 서브 클래싱을 사용하면 주문을 추가 할 수 있습니다.

또한, 나는 당신이 잘못된 인터페이스를 가지고 있다고 생각합니다. 객체의 내부 구조를 노출시키고 마법의 과제를 통해 수정합니다. 방법을 사용하면 인생이 훨씬 쉬워집니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top