[perl] Compartir variables
Raymond Hall
kovalski@iris.razteca.org.mx
Thu, 12 Nov 1998 19:08:25 -0600 (EST)
This message is in MIME format. The first part should be readable text,
while the remaining parts are likely unreadable without MIME-aware tools.
Send mail to mime@docserver.cac.washington.edu for more info.
---1463811837-439275691-910919305=:902
Content-Type: TEXT/PLAIN; charset=ISO-8859-1
Content-Transfer-Encoding: QUOTED-PRINTABLE
On Thu, 12 Nov 1998, Ing. Roberto Andrade wrote:
> > Estamos utilizando un Cgi, lo malo de esto es que necesitamos pasar una
> > variable de un cgi a otro.
[snip]
> La soluci'on es sencilla: usa campos de texto ocultos. Si lo est'as=20
En efecto el campo "hidden" es una gran y sencilla solucion, aun asi no
esta exenta de que con un poquito mas de ma=F1a un malicioso cracker le pas=
e
datos alterados al segundo cgi.
Hace un tiempo tuve la necesidad de compartir variables entre scripts perl
(no necesariamente cgi's) y en particular hashes y arreglos. El problema
admite tres soliciones obvias (tal vez mas no-tan-obvias)
1- que un script llame al otro y le pase parametros
Sencillo, pero muy limitado (que pasa si son concurrentes, p. ej.)
2- usar un archivo temporal o base de datos
Funcional, pero el "overhead" lo alenta
3- usar IPC.
Asi que me puse a jugar con la tercera opcion y tengo un modulo que me
funciona. Los scripts involucrados crean un objeto IPC.
Uno (el primero) de los scripts, crea el objeto y solicita una llave al
sistema. Los demas scripts usaran esta llave para acceder a la memoria.
El problema de la comunicaci=F3n as=EDncrona lo resolvi usando se=F1ales (U=
SR1 y
USR2) de la siguiente manera (ejemplo:)
***SCRIPT1:
use IPC_Transfer;=20
=2E..
my $conexion =3D new IPC_Transfer;
$conexion->open; =20
my $key =3D $conexion->key;=20
=2E..
(despues de pasarle $key a SCRIPT2 de algun modo)
%datos =3D {...};
$conexion->envia_hash(\%datos);
kill USR1 =3D> SCRIPT2_PID;
=2E..
(al final)
$conexion->close;
***SCRIPT2:
use IPC_Transfer;
my $conexion =3D new IPC_Transfer;
( obtenemos $key de algun modo, por ejemplo:
my $key =3D shift(@ARGV) || die "necesito una llave de shmem!\n"; )
$conexion->key($key);
$SIG{USR1} =3D sub {&recibe($conexion}};
=2E..
sub recibe {
my $conexion =3D shift;
my (%datos);
$conexion->recibe_hash(\%datos);
return \%datos;
} =20
Obviamente al modulo le faltan hartas cosas, pero se los mando por si les
sirve (a mi me jala chido) y a ver si alguien se apunta a mejorarlo.
Salu2,
Raymond.
=20
---1463811837-439275691-910919305=:902
Content-Type: TEXT/PLAIN; charset=US-ASCII; name="IPC_Transfer.pm"
Content-Transfer-Encoding: BASE64
Content-ID: <Pine.LNX.3.96.981112190825.902B@iris.razteca.org.mx>
Content-Description: modulo perl para compartir hashes via shmem
IyMjDQojIyMgSVBDX1RyYW5zZmVyLnBtDQojIyMNCiMjIyBWZXJzaW9uIDAu
MSANCiMjIyAoYykxOTk4IFJheW1vbmQgSGFsbCA8a292YWxza2lAaXJpcy5y
YXp0ZWNhLm9yZy5teD4NCiMjIw0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjDQoNCnBhY2thZ2UgSVBDX1RyYW5zZmVyOw0KdXNlIHN0cmlj
dDsNCg0KJElQQ19UcmFuc2Zlcjo6VkVSU0lPTiA9IDAuMTsNCiRJUENfVHJh
bnNmZXI6Ol9FUlJPUl9BTF9SRUNJQklSID0gLTE7DQokSVBDX1RyYW5zZmVy
OjpfRVJST1JfQUxfRU5WSUFSID0gLTI7DQokSVBDX1RyYW5zZmVyOjpfRVJS
T1JfQUxfQUJSSVIgPSAtMzsNCiRJUENfVHJhbnNmZXI6Ol9FUlJPUl9BTF9D
RVJSQVIgPSAtNDsNCiRJUENfVHJhbnNmZXI6Ol9FUlJPUl9TRUdNRU5UT19Z
QV9BQklFUlRPID0gLTU7DQoNCnN1YiBuZXcgew0KICAgIG15ICRzZWxmID0g
e307DQogICAgJHNlbGYtPntJUENfUFJJVkFURX0gPSAwOw0KICAgICRzZWxm
LT57SVBDX1JNSUR9ID0gMDsNCiAgICAkc2VsZi0+e0tFWX0gPSB1bmRlZjsN
CiAgICAkc2VsZi0+e1BFUk1TfSA9IHVuZGVmOw0KICAgICRzZWxmLT57U0la
RX0gPSB1bmRlZjsNCiAgICAkc2VsZi0+eyJfU0VHTUVOVF9DUkVBVE9SX1BJ
RCJ9ID0gdW5kZWY7DQogICAgYmxlc3MoJHNlbGYpOw0KICAgIHJldHVybiAk
c2VsZjsNCn0NCg0Kc3ViIERFU1RST1kgew0KICAgIG15ICRzZWxmID0gc2hp
ZnQ7DQogICAgaWYgKCRzZWxmLT57Il9TRUdNRU5UX0NSRUFUT1JfUElEIn0g
PT0gICQkKSB7DQoJJHNlbGYtPmNsb3NlOw0KICAgIH0NCn0NCg0Kc3ViIGtl
eSB7DQogICAgbXkgJHNlbGYgPSBzaGlmdDsNCiAgICBpZiAoQF8pIHskc2Vs
Zi0+e0tFWX0gPSBzaGlmdH0NCiAgICByZXR1cm4gJHNlbGYtPntLRVl9Ow0K
fQ0KDQpzdWIgZXJyY29kZSB7DQogICAgbXkgJHNlbGYgPSBzaGlmdDsNCiAg
ICBteSAkY29kZSA9IHNoaWZ0Ow0KICAgICRjb2RlID09IC0xICYmIGRvIHty
ZXR1cm4gIkVSUk9SX0FMX1JFQ0lCSVIifTsNCiAgICAkY29kZSA9PSAtMiAm
JiBkbyB7cmV0dXJuICJFUlJPUl9BTF9FTlZJQVIifTsNCiAgICAkY29kZSA9
PSAtMyAmJiBkbyB7cmV0dXJuICJFUlJPUl9BTF9BQlJJUiJ9Ow0KICAgICRj
b2RlID09IC00ICYmIGRvIHtyZXR1cm4gIkVSUk9SX0FMX0NFUlJBUiJ9Ow0K
fQ0KDQpzdWIgb3BlbiB7DQogICAgbXkgJHNlbGYgPSBzaGlmdDsNCiAgICBt
eSAoJHNpemUsJHBlcm1zKSA9IEBfOw0KICAgICRzaXplID0gMTAyNCB1bmxl
c3MgZGVmaW5lZCgkc2l6ZSk7ICMgZGVmYXVsdHMgdG8gMWsNCiAgICAkcGVy
bXMgPSAwNzc3IHVubGVzcyBkZWZpbmVkKCRwZXJtcyk7ICMgZGVmYXVsdHMg
dG8gcHVibGljIHJ3eCAoY3VpZGFkbyEpDQogICAgaWYgKCFkZWZpbmVkKCRz
ZWxmLT57S0VZfSkpIHsNCgkkc2VsZi0+e0tFWX0gPSBzaG1nZXQoJHNlbGYt
PntJUENfUFJJVkFURX0sICRzaXplLCAkcGVybXMpOw0KCWlmIChkZWZpbmVk
KCRzZWxmLT57S0VZfSkpIHsNCgkgICAgJHNlbGYtPntTSVpFfSA9ICRzaXpl
Ow0KCSAgICAkc2VsZi0+e1BFUk1TfSA9ICRwZXJtczsNCgkgICAgJHNlbGYt
PnsiX1NFR01FTlRfQ1JFQVRPUl9QSUQifSA9ICQkOw0KCSAgICByZXR1cm4g
MDsNCgl9IGVsc2Ugew0KCSAgICByZXR1cm4gJHNlbGYtPnsiX0VSUk9SX0FM
X0FCUklSIn07DQoJfQ0KICAgIH0gZWxzZSB7DQoJcmV0dXJuICRzZWxmLT57
Il9FUlJPUl9TRUdNRU5UT19ZQV9BQklFUlRPIn07DQogICAgfQ0KfQ0KDQoN
CnN1YiBjbG9zZSB7DQogICAgbXkgJHNlbGYgPSBzaGlmdDsNCiAgICBpZiAo
JHNlbGYtPnsiX1NFR01FTlRfQ1JFQVRPUl9QSUQifSA9PSAgJCQpIHsNCgly
ZXR1cm4gc2htY3RsKCRzZWxmLT57S0VZfSwgJHNlbGYtPntJUENfUk1JRH0s
MCk7DQogICAgfSBlbHNlIHsNCglyZXR1cm4gJHNlbGYtPnsiX0VSUk9SX0FM
X0NFUlJBUiJ9Ow0KICAgIH0NCn0NCg0Kc3ViIGVudmlhX2hhc2ggew0KICAg
IG15ICgkc2VsZiwkaGFzaHJlZikgPSBAXzsNCiAgICBpZiAocmVmKCRoYXNo
cmVmKSkgew0KCW15ICVoYXNoID0gJXskaGFzaHJlZn07DQoJbXkgJGtleSA9
ICRzZWxmLT57S0VZfTsNCglteSAoJHBhY2tzdHIsICRkYXRhLCAkdG1wKTsN
Cglmb3IgJHRtcCAoa2V5cyAlaGFzaCkgew0KCSAgICBteSAkdG9rZW4gPSBz
cHJpbnRmICJhJWRhJWQiLGxlbmd0aCgkdG1wKSxsZW5ndGgoJGhhc2h7JHRt
cH0pOw0KCSAgICAkcGFja3N0ciAuPSAkdG9rZW47DQoJICAgICRkYXRhIC49
IHBhY2soJHRva2VuLCR0bXAsJGhhc2h7JHRtcH0pOw0KCX0NCgkkdG1wID0g
cGFjaygiUyIsbGVuZ3RoKCRwYWNrc3RyKSk7DQoJJHRtcCAuPSBwYWNrKCJT
IixsZW5ndGgoJGRhdGEpKTsNCglzaG13cml0ZSgka2V5LCAkdG1wLCAwLCA0
ICkgfHwgZGllICIkISI7DQoJc2htd3JpdGUoJGtleSwgJHBhY2tzdHIsIDQs
IGxlbmd0aCgkcGFja3N0cikgKSB8fCBkaWUgIiQhIjsNCglzaG13cml0ZSgk
a2V5LCAkZGF0YSwgKDQrbGVuZ3RoKCRwYWNrc3RyKSksIGxlbmd0aCgkZGF0
YSkgKSB8fCBkaWUgIiQhIjsNCiAgICB9IGVsc2Ugew0KCXJldHVybiAkc2Vs
Zi0+eyJfRVJST1JfQUxfRU5WSUFSIn07DQogICAgfQ0KICAgIHJldHVybiAk
c2VsZi0+eyJfRVJST1JfQUxfRU5WSUFSIn07DQp9DQoNCnN1YiByZWNpYmVf
aGFzaCB7DQogICAgbXkgJHNlbGYgPSBzaGlmdDsNCiAgICBpZiAoZGVmaW5l
ZCgkc2VsZi0+e0tFWX0pICYmIEBfKSB7DQoJaWYgKHJlZigkX1swXSkpIHsN
CgkgICAgbXkgKCRidWZmKTsNCgkgICAgbXkgJGhhc2ggPSAkX1swXTsNCiAg
ICAgICAgICAgIG15ICRrZXkgPSAkc2VsZi0+e0tFWX07DQoJICAgIHNobXJl
YWQoJHNlbGYtPntLRVl9LCRidWZmLDAsNCk7DQoJICAgIG15ICgkcGFja3N0
cl9sZW4sJGRhdGFfbGVuKSA9IHVucGFjaygiU1MiLCRidWZmKTsNCgkgICAg
c2htcmVhZCgka2V5LCRidWZmLDQsJHBhY2tzdHJfbGVuKTsNCgkgICAgbXkg
JHBhY2tzdHIgPSAkYnVmZjsNCgkgICAgc2htcmVhZCgka2V5LCRidWZmLCg0
KyRwYWNrc3RyX2xlbiksJGRhdGFfbGVuKTsNCgkgICAgbXkgJWRhdG9zID0g
dW5wYWNrKCRwYWNrc3RyLCRidWZmKTsNCgkgICAgZm9yICRidWZmIChrZXlz
ICVkYXRvcykgew0KCQkkaGFzaC0+eyRidWZmfSA9ICRkYXRvc3skYnVmZn07
DQoJICAgIH0NCgkgICAgcmV0dXJuIDA7DQoJfQ0KICAgIH0NCiAgICByZXR1
cm4gJHNlbGYtPnsiX0VSUk9SX0FMX1JFQ0lCSVIifTsNCn0NCg0KMTsNCg0K
DQoNCg0KDQoNCg0K
---1463811837-439275691-910919305=:902--
--------- Pie de mensaje --------------------------------
Visite: http://tlali.iztacala.unam.mx/~randrade/perl.shtml
Cancelar inscripcion:
mail to: majordomo@tlali.iztacala.unam.mx
text : cancelacion perl