[Petal] Accessor methods in path statements? - Comments please!

Kurt Stephens kstep@pepsdesign.com
Fri, 6 Sep 2002 20:25:44 -0400


This is a multi-part message in MIME format.

------=_NextPart_000_000B_01C255E3.93E34F00
Content-Type: text/plain;
	charset="iso-8859-1"
Content-Transfer-Encoding: 7bit

Greetings, All!

After spending some time examining the internals of VAR.pm, I began to play
around with the idea of allowing a single method argument to be declared
directly in the path statement.  While this may seem rather upsetting at
first, this is based on the following logic:

Why should the argument to an accessor method be treated any differently
than a hash key or an array index?

For example, imagine an application framework where the template is
populated with a single application object.

$template->process($app);

In a contrived case, I could specify the path

<? petal:var name="app/forms/userinfo/fields/username/value" ?>

which maps to the method call:

$app->forms('userinfo')->fields('username')->value().

Attached is an EXPERIMENTAL hacked version of VAR.pm, named XVAR.pm, that
implements this behavior.  I also included a demonstration of this in
xvar_pathdemo.pl.  The XVAR module also implements a bizarre feature of
_questionable_virtue_ that replaces the argument token pulled from the path
if there is any indication that it may be a valid key, index or method for
the value returned by the last call.  The upside to this is that it allows
calls to methods with no parameters that return object, array or hash
references.  The downside is demonstrated in the file xvar_pathology.pl,
where I demonstrate how this algorithm will become confused and do the wrong
thing when the accessor argument is the same as a method name.

Aside from this, the XVAR module has a few features that I think belong in
the production version of VAR.pm.  I have wrapped the method calls in eval{}
blocks, and changed the handling of autoloaded methods so that if AUTOLOAD
fails with an 'Undefined subroutine' value in $@, the $next argument will
still be tested as a possible hash key or array index.

Again, I stress that XVAR.pm is an experimental module that demonstrates
alternate path semantics and possible improvements to the object handling
code in VAR.pm.  It is intended for educational and entertainment purposes
only!

Any comments would be most welcome.

Best Regards,

Kurt Stephens
kstep@pepsdesign.com

------=_NextPart_000_000B_01C255E3.93E34F00
Content-Type: application/x-gzip;
	name="xvar.tar.gz"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
	filename="xvar.tar.gz"

H4sICBE4eT0AC3h2YXIudGFyAO0ba1PbSHI/pyr/YQJsZF/ANmZD6iC8QtiDy4MtILe3h1lqLI9t
LbLkSHKMAd9vv+6eGXlkSWCISXavPLuFpZme7lZ3T7+kXH7hwXmXR+2G6PilrvvDI4zlSmV1dZX9
wHBUxn7Z8vJPLyuMvXq5slpdWa68guvl6svqqx9Y5TGYGR+9MOIBY/ArgtvgWoHf634Lhr7tmP/K
8fTJPLscsyGYw+m9SxHYTihCFrUF+0VE3F1b2+dhe23t3//aOWLishuIMHR8j4kv3O3xyA+Y7fIw
LOH2E9hk+w3B6sL1+yxs+/2Q9ds8wsue22Bt3u0KjzlN1hfwfyBY5DPuAjBu50Gr1xFeFLImoO2I
qO03mA3LIYLVBZCPAm5HosGagd8hHvEZkPZXy+TpEzAnFkaBY0frePv1KLvcvuAtwX72/fVp4Jtn
OyBe1xV2hBoguZOo3sBx8Ot/wHw4PVHs8qBLggh7deaJPrt++gQPf2fAFrqBDxrZALU6TZSWnpcs
bbBANAsSqMhubhS8ARcKtwlgCiOOg5O9D8dsY5NdD0eTQ7Wl7oLRyV2LiohaCUTUCzy5BFNDza8T
iY7JsCI4zq/HO8KYlgtgnYXt86LJHcISyiQKHHbg8ws2t6NslxUIsMickHl+xDgqZ24EjqPn0fOQ
kCTw8+fmnfjMLNhlGVToAZY2r0lMw2tifAjc0A4FN9QPoFg6QIblIyInTb/nNQxOFBfi0gmjMJtA
LBJTzBlAsdh5eM6DgA/gYe6QvsJ4il4E3M2P10ncw7MxtG1wQhNjTeLSmL7+YOgDDcp57AN9pQ/0
IgMJyBW/ia5k6iccL+sc/nzuFwB/cf1PeYiuHnSIrv5ih+jrVTuy0aup2WjodLquUPbZd6I28z2h
AvSUgu8jBpmHR5F67+rq/gfAwDgn10I+CAnZs7npK7rDHW9dH2kjZZNJDPsEs5goQeomAgdPF3fZ
FxFQEgceBdK6p08WEqneh8O3Bz8f7B0dg5VioohnxEolg5Yi8KbnQGbn93QKwtqOCHhgtwdgGiie
po9aROXKRAjn6pCxyDnpS+XcVTx3Rchx69Imns4Cbdikjeig8DdeuVIrV9J1KfyjSLTBTnHibEQ7
DidgHhdioDEP4/39tq8ebxfyTxb6HW3vkGF1Awd81NwJpciBy/p8sFbz5iTLsBPFZbBeswB1zSoa
t1dwi/KTmAxYBI0hERBv0HIKiLi4yOZShMxHXdo8rZzl08kDnZyQkhsYBohteDulTNhbSSnB1rwT
XX0kZIuKQaTKSsZtndaAGkiTvHqTrE3PAimyY5gtIydlYFFfXBmcK3ALDX8tE7hMbgF5t4amnNRO
U8jEhzmRwZC5XK7cyVIO+ARMKX3EPKn7HJbUahl0NxFPWfAppjRb8+y9iKyQ8UZDni3bxwhz6USD
EoyELhPCPI2PK2r5LFu/pnwMdiZS95177xA0ojAErdk9RX7Phjn8mrKr3I/dO7beogE8Y00fa2/H
azHX8SANx26ABzUwj2TQ4F4ybjQFh7gmcHu/TeU7APU8iDyNuHrHpE2GP5iEAG5U6Vln0SgZJrD+
/B136GWMpBbbpE4gZ8s9iMaqSbA/keNJPvDDSI64n8zZJbfkEIXc0LYpqaIIplJasJoGkwFazzSc
ADIDd5DNJwERVX11K48Z4Jn8fe8+3WONuHfnu35r8DgN4Nv7v2y1UlnR/d+Vl9WfsP/7qlqZ9X+/
xZh/trtWBqfsluuORxdsqT+dUi9lWqov/HYUF8LYoSOMY0NUsLF5MIoH3G35ARSJHeZ4uDndRm4J
KJZt32tS4KgPMM5w8iR+EMcRCjJYayLOkApw/MMha5hu6flofd+PfkNMrQaPAiFSzaI/d7f3tn7v
x50Pe5gYEc7F0fzu/sH7t0d7H7NawQ8t44UrKDGZbivLbmPdO0kviyCNZhbaxS3dLAWu21nqFvtZ
uDGroaWFZva0aFtOUwvx3LupNU4kr6+VARdrgkjeq4WLdvII3bFbmyYLNxvLf5ruSeCDhmTBi2or
WDhhFVUvw4Op5cQyzSTWq6n1amJ9JbW+YslOiiwTwG7V67u6YIfv4HmRhaVNdaw0SarK6JIaNHQ1
BlQdAVVjoOoY0MoIaGXU0Jmg7keuyPTxIid/xKWyIlcmFstok0bWOOEu8646FRzm3co4xlgTfcd1
WT0Q/ILqZHLPGItbwkuoUU/Gmlbok8aiJseBqpMAreQCgUo0eUO3GoK0G3NDZqDv7oCumsDVO4CV
7WglaIbIQPQNQeCLbO2TshSngUcKSqpmaLSuFrYxWixsPwzxNyNwX0Lz7NiXlheBDd7D8LLsgIhO
ZgQp0FwLSEEq9Zsimme/+sFFuMjqvUh/VgCuvR/4XovhqXs2gSiR0PQVFGOdEPX3LkFm4zsOTB9K
3c6j0rjj+6+V1eVqXP+/wm/Blis/rc7q/28yNtqCN5apgkLnkC6vl9heTrpKpXTEvQYP8GMsSKk6
fsNpQspZQlQK8/FvHw9/OT44lgm+dlmdwbnX69QFJbRVytYxCNAHHBhUtWeTeWxJfb6FhTW414V4
tzU0KO18Otk/PMKJfwruLX1w7LZw2b4DLLPXf7Txd7tz0fDtku13NhHug+TX+ALMD5yW48FzymOB
7YR3vSBix5HotoUXstcXIVxud0U3bIjQaXkxMsqoQAI9V8iudcNBfiE+AAGoiYCLuPngOjYgo/4D
vfRzIqxQEmLb22M7748PJWaoG0Sn62InXQsayKxJmRo6IwR2LxrVJimFro/1KPCmzwMPBBuuj5Xv
T59gLbFwfHJ08PEf50d7528PP715D6U2+/yZ3RS2Xj+rwSjWanOlv22Ztzfrqa3H8Ju11UputdJb
dSW5weYKW2splDcp/opzGgc878EOzMRYAMfpztJ/+NJV7fxMXVWW/l47r9VKa7Xy2Yt468nhu72P
BvUU+RsTe3FOCUyWpt3AxwbU0yfX6QbHeJuAFJoxH78CGW8hwOJ25F+gNW6YYP9l5ULMdrHcCjsG
NswOWEyGFRSGIsNvLn2viTX6XJ3DGRvAOb+kD4cky2sGjUKNENHTalYIM+Dtuk7EyrXyTa1UXpQE
DShAgewqsvGzzMM5Abu2BYMUxuF1VzbmQjx4cFqcgJFLkMDIU4E+/NmorMNf9lrixesXL4oS6Doh
QSWh8HTBOVsfdWDkEgjsd1OJC+UkDuqKKMiwXKsVSsXywrIhWA1A6Edu6+e9k919SaQ4aprgj3BD
cQuJ3wtwdGpWsVxez1pWqws5y5MwCNdJjoaGVS3YvSCQFkdPoiD7bQfUUiBFp4XsicvIMCsCMiSN
30XEeLHttL9zvG+h1aVWDFdlpRURG+ku96jzpV4Wadsc64Eh7RDycojt0vbwPRLu05OaUUNQxuOr
SwhB9IDD9TFpzYPLZh2n1Y6wj4EdZ3yntog265Gbx1e1IEP1rTFEKwihQJnKHWUJmeLZOTra+W3y
xyeysrPtQVRuCNvpQPRC6oVYNMXs/mBB6Q6PQa3xAqw/IY67KXZ5AGc1gozgFmLTUsQpcXuWVgSI
FM2pwwdSEzJl2GK3iTot33l2ECpj1m8EtpItWjl5Tv3NBGc2EJWyLK4nt0TB4Jz3It/1OW55lsTx
/Pk4EgtSmMP3hztvraRAyGUl9qJ3NrEXR8DX+fKXrnqDVYpJmLEtUh5vffyuPhBQ2w6gwg0EopIq
hPQG0pFosJXeZ1ap4yNTr1LmBUJsyk+PYUISI/Z2fS9yvB5xhV9VIWELMq2+cN00PBFRdq/q6TTK
d0J0IdEKI0wyAa3WBmty8ICN9BZ9RBa2sx9YE0zYAb3Q3pbH7hOkhU0Hv22ArAEKDKAsymNCGCZv
RyFEj0ztgXhCOI/ki+jhSfcUfUuM/SpkB6ZHHWlQJw+zkNALOB37MfrihPFPKUrpTWT2YBw5ISHx
JA80FcJfXAf+oC5p826ophaldRZZhllmW1HsCLeL6cUczsBRWB3pwHzQGhwLXgfFjZpZOZuaSi42
Nb+7fhg6dThY6LOYK1pOBI47orixyBwwi0s443nIlApkjialo0JPXykW8japfR5hpOpzel2Uh8+W
xtJQWZepYjLXPtqQ/ABHJmuAsg4FBr2TzUYZf6jD2I43YCII/MBs/du8h8HT8WILzcPkQIDh+JYy
R7bo4KR3L8Tu3cg0wMuqd08FM6qjLobFDLXjwDwzA6FOUKaNV8Z8igfy6Iwi8sR40sFEHpOvwWCE
o8nRIPMbKKJaoTwtIRFOkpJCmpITy0GWc4hx9DzpoMg/LUqUGV4KxzDLeeBAu82KWX/R+JLge16n
VLLlAI7J8KuOoZ88laeS6Pwk5Z7JvebgnnkljgmS/AxJ0JckmPeSZzbkoHLLpCi0pd77eR+UzRuG
cEdGPxnlibL6aWsgmd1naOCAtZwvgvW6CdmLuwTreF8g5VGJPYg0y6LGK+G4pOhjmCI0cIYao1TK
aEnMQ+zGb4/ltxAoAPnJwS3lPv2LAB7gF1DYU9o1KMj2J4V1zeea4l0xUseMPAoc8UU05EudWKwa
ZwkbVVrGEiOG/zzYgvYQI3e7xeYsfWfNsTVmYfuyaeVRK5q4Y5+lIHLaDWg845SV/LIaBqm+w48j
Kyro5DJyRDy/mOwnKAhj14/Xmoo+94Zh1jTgeLmpPiixrPjIpcQ39unJCNFQ9geX405h8r/v/SZg
NmZjNmZjNmZjNmZjNmZjNmZjNmZjNv5fx/8A23ogNgBQAAA=

------=_NextPart_000_000B_01C255E3.93E34F00--