クラス変数の文字列への参照を保存しようとしています。 この変数に逆参照することでこの変数にアクセスしたいと考えています。代わりに使用しての日常getHeaders
で例えば :クラス変数としての文字列への参照
my $fileContentsRef = $this->getFileContent;
my $fileContentsRef1 = $$fileContentsRef;
$fileContentsRef1 =~ /Spaltenname.*?Datentyp.*?---\n(.*?)\n\n/gsmi;
私が使用したい:
my $fileContentsRef = $this->getFileContent;
$$fileContentsRef =~ /Spaltenname.*?Datentyp.*?---\n(.*?)\n\n/gsmi;
は、詳細については、あなたが最後にコードが表示されるはずです。 私の問題は、コピーを使用していないとき(つまり、$fileContentsRef1
を使用していないとき)にプログラムが動作しないということです。私は何をしていますか、間違っていますか?私が記述した方法で目標に到達することは可能ですか?いくつか私に手がかりを与えることができますか?
open FILE, "a1.bad";
$file_contents .= do { local $/; <FILE> };
close FILE;
my $log = auswerter->new(\$file_contents);
#-----------------------------------------------------------------
# Subs
#-----------------------------------------------------------------
# CONSTRUCTOR
sub new
{
my $fileRef = $_[1];
my $self = {};
bless $self;
$self->initialize();
if($fileRef) { $self->{fileRef} = $fileRef; }
return $self;
}
sub initialize
{
#-----------------------------------------------------------------
# Configuration
#-----------------------------------------------------------------
my $this = shift;
}
sub setFile {
my $this = shift;
$this->{file} = shift;
}
sub getFileContent
{
my $this = shift;
return $this->{fileRef};
}
sub getHeaders
{
print "HEADERS...\n";
my $this = shift;
my @headers =();
my $fileContentsRef = $this->getFileContent;
my $fileContentsRef1 = $$fileContentsRef;
$fileContentsRef1 =~ /Spaltenname.*?Datentyp.*?---\n(.*?)\n\n/gsmi;
@headers = split ("\n", $1);
foreach (@headers)
{
$_ =~ s/^(.*?)\s.*/$1/;
}
return \@headers;
}
sub getErrList
{
print "ERR LIST...\n";
my $this = shift;
my @errors =();
my $fileContentsRef = $this->getFileContent;
my $fileContentsRef1 = $$fileContentsRef;
$fileContentsRef1 =~ /Spaltenname.*?(Satz.*)ORA.*?^Tabelle/gsmi;
return \@errors if !$1;
@errors = split ("\n\n", $1);
foreach (@errors)
{
$_ =~ s/.*Spalte (.*?)\..*/$1/msgi;
}
return \@errors;
}
sub getEntries
{
my $this = shift;
my @entries =();
my $fileContentsRef = $this->getFileContent;
my $fileContentsRef1 = $$fileContentsRef;
$fileContentsRef1 =~ /.*==\n(.*)/gsmi;
@entries = split ("\n", $1);
return \@entries;
}
sub sqlldrAnalyze
{
my $this = shift;
my $token = shift;
my $errRef =$this->getErrList();
return "" if $#$errRef < 0 ;
my $headersRef = $this->getHeaders();
my $entriesRef = $this->getEntries();
my $i = 0;
my $str = "";
$str = "<html>";
$str .= "<table rules=\"all\">";
$str .= "<tr>";
foreach (@$headersRef)
{
$str .= "<th>".$_."</th>";
}
$str .= "</tr>";
foreach (@$entriesRef)
{
my @errOffset = grep { $headersRef->[$_] =~ $errRef->[$i] }0..$#$headersRef ;
my @entries = split($token, $_);
$str .= "<tr>";
foreach (my $j =0; $j <= $#entries;$j++)
{
$str .= "<td nowrap";
$str .= " style=\"background-color: red\"" if $j == $errOffset[0];;
$str .= ">";
$str .= "<b>" if $j == $errOffset[0];
$str .= $entries[$j];
$str .= "</b>" if $j == $errOffset[0];
$str .= "</td>";
}
$str .= "</tr>\n";
$i++;
}
$str .= "</table>";
$str .= "</html>";
return $str;
}
return 1;
こんにちはエリックは、迅速な応答をありがとうございました。私は引数として文字列を参照して呼び出す(編集された質問を参照)。 –
こんにちは、エリック、もう一度感謝します。それはうまく動作します! –
もう1つ質問... getメソッドでpos()= 0を使用できるようにするには、どうすれば$ self - > {fileRef}を逆参照できますか? ありがとうございます –