Função de ligação Perl

Descrição

Esta função vincula VARIABLE à classe de pacote CLASSNAME que fornece implementação para o tipo de variável. Quaisquer argumentos adicionais em LIST são passados ​​para o construtor de toda a classe. Normalmente usado para vincular variáveis ​​hash a bancos de dados DBM.

Sintaxe

A seguir está a sintaxe simples para esta função -

tie VARIABLE, CLASSNAME, LIST

Valor de retorno

Esta função retorna a referência ao objeto vinculado.

Exemplo

A seguir está o código de exemplo mostrando seu uso básico, temos apenas dois arquivos no diretório / tmp -

#!/usr/bin/perl -w

package MyArray;

sub TIEARRAY {
   print "TYING\n";
   bless [];
}

sub DESTROY {
   print "DESTROYING\n";
}

sub STORE {
   my ($self, $index, $value ) = @_;
   print "STORING $value at index $index\n";
   $self[$index] = $value;
}

sub FETCH {
   my ($self, $index ) = @_;
   print "FETCHING the value at index $index\n";
   return $self[$index];
}

package main;
$object = tie @x, MyArray; #@x is now a MyArray array;

print "object is a ", ref($object), "\n";

$x[0] = 'This is test'; #this will call STORE();
print $x[0], "\n";      #this will call FETCH();
print $object->FETCH(0), "\n";
untie @x    		#now @x is a normal array again.

Quando o código acima é executado, ele produz o seguinte resultado -

TYING
object is a MyArray
STORING This is test at index 0
FETCHING the value at index 0
This is test
FETCHING the value at index 0
This is test
DESTROYING

Quando a função de empate é chamada, o que realmente acontece é que o método TIESCALAR de FileOwner é chamado, passando '.bash_profile' como argumento para o método. Isso retorna um objeto, que está associado por empate à variável $ profile.

Quando $ profile é usado nas instruções de impressão, o método FETCH é chamado. Quando você atribui um valor a $ profile, o método STORE é chamado, com 'mcslp' como o argumento para o método. Se você puder seguir isso, poderá criar escalares, matrizes e hashes vinculados, já que todos seguem o mesmo modelo básico. Agora vamos examinar os detalhes de nossa nova classe FileOwner, começando com o método TIESCALAR -