Perl array und ASP session variable

Perl array und ASP session variable

am 27.02.2006 07:35:27 von Udo Schmitt

Hallo Leute,

ich verwende ASP mit Perl und würde gerne ein array in einer Session
Variable speichern. In der Doku steht, das würde gehen, aber nicht, wie es
implementiert werden soll. Bei dieser Zeile:

$Session->{'MyVariable'} = @array;

wird nur die die Anzahl in die Variable geschrieben.

Wie geht es richtig?


Ciao

Udo


--

http://www.123schmitt.de

Re: Perl array und ASP session variable

am 28.02.2006 04:32:20 von martin

Udo Schmitt wrote:
> Bei dieser Zeile:
>
> $Session->{'MyVariable'} = @array;
>
> wird nur die die Anzahl in die Variable geschrieben.
>
> Wie geht es richtig?

'$'-Variablen speichern skalare Werte. Was man machen kann, ist, die
Referenz auf einen Array (die ein skalarer Wert ist) in einer skalaren
Variablen zu speichern:

$Session->{'MyVariable'} = \@array;

Dann muss man sie vor der Verwendung natuerlich dereferenzieren.

cu,
Martin
--
| Martin Vorlaender | OpenVMS rules!
UNIX is user friendly. | work: mv@pdv-systeme.de
It's just selective about | http://www.pdv-systeme.de/users/martinv/
who its friends are. | home: martin@radiogaga.harz.de

Re: Perl array und ASP session variable

am 28.02.2006 20:36:42 von Udo Schmitt

Session Variablen retten den Inhalt von Variablen über mehrer Aufrufe des
ASP/Perl Scriptes. Sind denn dann die Referenzen, d.h. der Speicherbereich
des arrays überhaupt noch vorhanden?

Ciao

udo



--

http://www.123schmitt.de
"Martin Vorlaender" schrieb im Newsbeitrag
news:4403c444.524144494f47414741@radiogaga.harz.de...
> Udo Schmitt wrote:
>> Bei dieser Zeile:
>>
>> $Session->{'MyVariable'} = @array;
>>
>> wird nur die die Anzahl in die Variable geschrieben.
>>
>> Wie geht es richtig?
>
> '$'-Variablen speichern skalare Werte. Was man machen kann, ist, die
> Referenz auf einen Array (die ein skalarer Wert ist) in einer skalaren
> Variablen zu speichern:
>
> $Session->{'MyVariable'} = \@array;
>
> Dann muss man sie vor der Verwendung natuerlich dereferenzieren.
>
> cu,
> Martin
> --
> | Martin Vorlaender | OpenVMS rules!
> UNIX is user friendly. | work: mv@pdv-systeme.de
> It's just selective about | http://www.pdv-systeme.de/users/martinv/
> who its friends are. | home: martin@radiogaga.harz.de

Re: Perl array und ASP session variable

am 28.02.2006 21:37:08 von Slaven Rezic

"Udo Schmitt" writes:

> Session Variablen retten den Inhalt von Variablen über mehrer Aufrufe des
> ASP/Perl Scriptes. Sind denn dann die Referenzen, d.h. der Speicherbereich
> des arrays überhaupt noch vorhanden?
>

Ob ASP das kann, weiß ich nicht. Falls nicht, kannst du thaw und
freeze aus Storable verwenden, um das Array zu (de)serialisieren.

--
Slaven Rezic - slaven rezic de
babybike - routeplanner for cyclists in Berlin
handheld (e.g. Compaq iPAQ with Linux) version of bbbike
http://bbbike.sourceforge.net

Re: Perl array und ASP session variable

am 01.03.2006 15:20:49 von Karlheinz Weindl

Udo Schmitt schrieb:

> Session Variablen retten den Inhalt von Variablen über mehrer Aufrufe des
> ASP/Perl Scriptes. Sind denn dann die Referenzen, d.h. der Speicherbereich
> des arrays überhaupt noch vorhanden?
>
Mit Sicherheit nicht.
Du wirst nicht umhin kommen dein Array serialisiert in einer
ASP-Sessionvariablen abzulegen, was ja auch schon vorgeschlagen wurde,
ebenso wie Methoden dazu.
Soweit ich mich noch erinnere stellt ASP für diesen Zweck innerhalb des
Session Objekts eine "Collection" (MS Terminologie für ein assoziatives
indizierbares Array ähnlich wie bei PHP) namens "Contents" bereit in dem
die Sessionvariablen abgelegt werden.
Dort eine Referenz auf einen Speicherbereich außerhalb des ASP
Adressraums unterbringen zu wollen halte ich für aussichtslos.

Gruß
Karlheinz

Re: Perl array und ASP session variable

am 01.03.2006 16:24:33 von Karlheinz Weindl

Udo Schmitt schrieb:

> Session Variablen retten den Inhalt von Variablen über mehrer Aufrufe des
> ASP/Perl Scriptes. Sind denn dann die Referenzen, d.h. der Speicherbereich
> des arrays überhaupt noch vorhanden?
>
Ich hab nochmal in einer alten Dickschwarte über ASP nachgeschlagen und
dabei erfahren, daß es doch möglich ist ein Array in einer
Sessionvariablen unterzubringen. So wie es aussieht wird es dabei, wenn
als solches erkannt, automatisch serialisiert und deserialisiert.

Die schlechte Nachricht ist, daß dies warscheinlich nur mit VB
Datenstrukturen (array of variants) funktioniert. Ob eine übergeben
Arrayreferenz aus Perl entsprechend als solche erkannt und behandelt
wird ist eine andere Frage.

Einen Versuch sollte es dir auf jedenfall wert sein.

Gruß
Karlheinz

Re: Perl array und ASP session variable

am 01.03.2006 20:51:46 von Udo Schmitt

Hi!

In einer anderen Newsgruppe habe ich diesen Tipp bekommen:

### test1.asp
<%@ language=PerlScript %>
<% $Session->{myarray} = [qw( one two three )]; %>

array saved. .



### test2.asp
<%@ language=PerlScript %>
<%= "

retrieved: @{ $Session->{myarray} }.

" %>

The output of test2.asp is: "retrieved: one two three"

Werde es morgen ausprobieren.

Die Lösung, das array in einem String zu speichern, funktioniert gut (auch
wenn der String sehr groß wird.).
Und das mit der VB Lösung: Ich kann ja eine Sequenz in VB schreiben - aber
kann ich auch eine Perl Variable in VB weiter verarbeiten (bin noch ein
6-Wochen-Perl-Newbie)? Dann könnte ich es auch in VB schreiben.

Ciao

Udo

Re: Perl array und ASP session variable

am 01.03.2006 21:28:53 von Karlheinz Weindl

Udo Schmitt schrieb:

> Hi!
>
> In einer anderen Newsgruppe habe ich diesen Tipp bekommen:
>
> ### test1.asp
> <%@ language=PerlScript %>
> <% $Session->{myarray} = [qw( one two three )]; %>
>

array saved. .


>
> ### test2.asp
> <%@ language=PerlScript %>
> <%= "

retrieved: @{ $Session->{myarray} }.

" %>
>
> The output of test2.asp is: "retrieved: one two three"
>
> Werde es morgen ausprobieren.

Wenn Obiges funktioniert, dann sollte es mit

$Session->{'MyVariable'} = \@array;

bzw. in der Umkehrung

@array = @{$Session->{'MyVariable'}}

eigentlich auch gehen.

Gruß
Karlheinz

Re: Perl array und ASP session variable

am 02.03.2006 14:32:38 von robin

Hi!

Die obige Variante funktioniert leider nicht - die beste Lösung ist
bislang die Umwandlung in einen String mit join/split.

Ciao


Udo (nicht Robin)

Re: Perl array und ASP session variable

am 02.03.2006 16:46:31 von Karlheinz Weindl

Udo schrieb:

> Hi!
>
> Die obige Variante funktioniert leider nicht - die beste Lösung ist
> bislang die Umwandlung in einen String mit join/split.

Irgendwas hast du dabei falsch gemacht!

Ich hab's jetzt selber mal ausprobiert:
Es funktioniert einwandfrei wenn man eine Arrayreferenz übergibt.

Eine manuelle (De)Serialisierung kannst du dir also sparen.

Gruß
Karlheinz

Re: Perl array und ASP session variable

am 03.03.2006 09:32:05 von robin

Hallo Karlhein,

ich danke dir für deine Mühe. Deine Methode mit den array Referenzen
habe ich jetzt erfolgreich getestet.

Kannst du mir vielleicht noch eine Frage beantworten: Wenn ich die
Referenz über die Session speichere und mein asp Script wird immer
wieder neu aufgerufen - wer stellt dann sicher, dass diese Daten auch
wirklich noch vorhanden sind (üblicherweise gehen allokierte Daten ja
nach Prozessende verloren). Stellt ein Prozess/thread innerhalb des Web
Servers (IIS) sicher, dass der entsprechende Speicherbereich nicht neu
beschrieben wird.

Wenn ich Referenzen innerhalb eines PERL-Scriptes verwende, habe ich
keine Bedenken - bei mir wird jedoch das asp-Scipt immer wieder neu
aufgerufen (Formularbearbeitung).

Vielen Dank

Udo Schmitt

Re: Perl array und ASP session variable

am 03.03.2006 10:25:12 von Karlheinz Weindl

Robin schrieb:
> Hallo Karlhein,
>
> ich danke dir für deine Mühe. Deine Methode mit den array Referenzen
> habe ich jetzt erfolgreich getestet.
>
> Kannst du mir vielleicht noch eine Frage beantworten: Wenn ich die
> Referenz über die Session speichere und mein asp Script wird immer
> wieder neu aufgerufen - wer stellt dann sicher, dass diese Daten auch
> wirklich noch vorhanden sind ...

Sobald du dein Array in der Sessionvariablen abgespeichert hast, ist es
sozusagen in der Obhut von ASP und hat ab da mit Perl nichts mehr zu
tun! D.h. es trifft alles was bei ASP dazu beschrieben zu, hier aber OT ist.

Tatsächlich ist die Implementierung so, dass du zwar eine Referenz an
ASP übergibst, ein darunterliegende Mechanismus aber die serialisierten
Arraydaten in der Sessionvariablen abspeichert, so dass dein Perl Array
problemlos aus dem Scope fallen kann.

Siehe dazu auch meine Antwort zu deinem Posting in c.l.p.misc

Gruß
Karlheinz

Re: Perl array und ASP session variable

am 03.03.2006 10:33:19 von Karlheinz Weindl

Übrigens noch zwei Tipps Udo/Robin:

Bleib beim Posten bitte bei (d)einen Account.

Vermeide beim Posten in c.l.p.misc den Namen Robin. Es könnte dort zu
unangenehmen Verwechslungen kommen.

Cia
Karlheinz