<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/'><id>tag:blogger.com,1999:blog-876358347971598886.post7304749074112351943..comments</id><updated>2009-11-21T11:36:09.256+02:00</updated><title type='text'>Comments on nothingmuch's perl blog: Functional programming and unreasonable expectatio...</title><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blog.woobling.org/feeds/7304749074112351943/comments/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/876358347971598886/7304749074112351943/comments/default'/><link rel='alternate' type='text/html' href='http://blog.woobling.org/2009/11/functional-programming-and-unreasonable.html'/><author><name>nothingmuch</name><uri>http://www.blogger.com/profile/03975438115490089158</uri><email>nothingmuch@woobling.org</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>14</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-876358347971598886.post-4962097169709361694</id><published>2009-11-21T11:36:09.844+02:00</published><updated>2009-11-21T11:36:09.844+02:00</updated><title type='text'>It should have been "The 'number' method is not pu...</title><content type='html'>It should have been &amp;quot;The &amp;#39;number&amp;#39; method is not purely functional because it changes the state of the object which is in the outside scope&amp;quot;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/876358347971598886/7304749074112351943/comments/default/4962097169709361694'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/876358347971598886/7304749074112351943/comments/default/4962097169709361694'/><link rel='alternate' type='text/html' href='http://blog.woobling.org/2009/11/functional-programming-and-unreasonable.html?showComment=1258796169844#c4962097169709361694' title=''/><author><name>zby</name><uri>http://www.blogger.com/profile/04636763782334128869</uri><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.woobling.org/2009/11/functional-programming-and-unreasonable.html' ref='tag:blogger.com,1999:blog-876358347971598886.post-7304749074112351943' source='http://www.blogger.com/feeds/876358347971598886/posts/default/7304749074112351943' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-876358347971598886.post-1966686043145896025</id><published>2009-11-21T11:34:51.790+02:00</published><updated>2009-11-21T11:34:51.790+02:00</updated><title type='text'>Rewording what I said at IRC.  The benefit of usin...</title><content type='html'>Rewording what I said at IRC.  The benefit of using a functional language is that you get perfect isolation, this is because there is no state.  But with imperative languages you can also write code that is purely functional - you just need to isolate the state.  This means you use only subs that don&amp;#39;t change global Perl state and don&amp;#39;t use any variables from outer scope.  But it does not mean that they use only other pure functions. Here is an example:&lt;br /&gt;&lt;br /&gt;package Adder;&lt;br /&gt;use Moose;&lt;br /&gt;&lt;br /&gt;has number =&amp;gt; ( is =&amp;gt; &amp;#39;rw&amp;#39; );&lt;br /&gt;&lt;br /&gt;sub add {&lt;br /&gt;my ( $self, $value )  = @_;&lt;br /&gt;return $value + $self-&amp;gt;number;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;package PureFunctional;&lt;br /&gt;&lt;br /&gt;sub add_four {&lt;br /&gt;my $value = shift;&lt;br /&gt;my $adder = Adder-&amp;gt;new;&lt;br /&gt;$adder-&amp;gt;number( 4 );&lt;br /&gt;return $adder-&amp;gt;add( $value );&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;The &amp;#39;add&amp;#39; method is not purely functional because it changes the state of the object which is in the outside scope - but the add_four sub is purely functional because that object is an automatic variable of that sub.&lt;br /&gt;&lt;br /&gt;The point is that if we had that hypothetical &amp;#39;use pure&amp;#39; pragma we would have a language that gives you the convenience of imperative programming together with the safety of functional programming.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/876358347971598886/7304749074112351943/comments/default/1966686043145896025'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/876358347971598886/7304749074112351943/comments/default/1966686043145896025'/><link rel='alternate' type='text/html' href='http://blog.woobling.org/2009/11/functional-programming-and-unreasonable.html?showComment=1258796091790#c1966686043145896025' title=''/><author><name>zby</name><uri>http://www.blogger.com/profile/04636763782334128869</uri><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.woobling.org/2009/11/functional-programming-and-unreasonable.html' ref='tag:blogger.com,1999:blog-876358347971598886.post-7304749074112351943' source='http://www.blogger.com/feeds/876358347971598886/posts/default/7304749074112351943' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-876358347971598886.post-149254506227513250</id><published>2009-11-21T10:16:32.754+02:00</published><updated>2009-11-21T10:16:32.754+02:00</updated><title type='text'>You are assuming that receiving a message is an op...</title><content type='html'>You are assuming that receiving a message is an operation with side effects. In the context of the blog post it would really be more appropriate to rail on Perl.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/876358347971598886/7304749074112351943/comments/default/149254506227513250'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/876358347971598886/7304749074112351943/comments/default/149254506227513250'/><link rel='alternate' type='text/html' href='http://blog.woobling.org/2009/11/functional-programming-and-unreasonable.html?showComment=1258791392754#c149254506227513250' title=''/><author><name>nothingmuch</name><uri>http://www.blogger.com/profile/03975438115490089158</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04344917020781355723'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.woobling.org/2009/11/functional-programming-and-unreasonable.html' ref='tag:blogger.com,1999:blog-876358347971598886.post-7304749074112351943' source='http://www.blogger.com/feeds/876358347971598886/posts/default/7304749074112351943' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-876358347971598886.post-4011874112139760755</id><published>2009-11-21T00:40:25.993+02:00</published><updated>2009-11-21T00:40:25.993+02:00</updated><title type='text'>@Sterling: Purely functional means side-effect fre...</title><content type='html'>@Sterling: Purely functional means side-effect free and not mutation free. Erlang allows uncontrolled side effects (message passing) and, therefore, is &lt;i&gt;not&lt;/i&gt; purely functional.&lt;br /&gt;&lt;br /&gt;Bugs introduced by purely functional programming typically fall into three categories: stack overflows, unusable performance and unusable memory consumption. The former is a consequence of avoiding loops and the latter is a consequence of laziness (which renders performance and memory consumption unpredictable).</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/876358347971598886/7304749074112351943/comments/default/4011874112139760755'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/876358347971598886/7304749074112351943/comments/default/4011874112139760755'/><link rel='alternate' type='text/html' href='http://blog.woobling.org/2009/11/functional-programming-and-unreasonable.html?showComment=1258756825993#c4011874112139760755' title=''/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.woobling.org/2009/11/functional-programming-and-unreasonable.html' ref='tag:blogger.com,1999:blog-876358347971598886.post-7304749074112351943' source='http://www.blogger.com/feeds/876358347971598886/posts/default/7304749074112351943' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-876358347971598886.post-3514406916492072499</id><published>2009-11-20T17:20:22.229+02:00</published><updated>2009-11-20T17:20:22.229+02:00</updated><title type='text'>Well, what would you do with it?

You can walk the...</title><content type='html'>Well, what would you do with it?&lt;br /&gt;&lt;br /&gt;You can walk the optree and unless all of the ops are known pure (or have known pure implications in the context, such as an entersub whose subroutine child op is refers to a GV that contains a CV that is also known pure) return false. This check can be improved incrementally.&lt;br /&gt;&lt;br /&gt;Once you have that you can write a B::Util::CheckPurity or something, which can check for the purity of a given subroutine easily.&lt;br /&gt;&lt;br /&gt;With that you could then do interesting things, but the question is what =)&lt;br /&gt;&lt;br /&gt;Some ideas:&lt;br /&gt;&lt;br /&gt;1. Memoize::Automatically&lt;br /&gt;2. a pragma to assert that all the subroutines declared in a certain scope must be pure unless otherwise excluded&lt;br /&gt;3. debugging aids maybe?&lt;br /&gt;&lt;br /&gt;...</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/876358347971598886/7304749074112351943/comments/default/3514406916492072499'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/876358347971598886/7304749074112351943/comments/default/3514406916492072499'/><link rel='alternate' type='text/html' href='http://blog.woobling.org/2009/11/functional-programming-and-unreasonable.html?showComment=1258730422229#c3514406916492072499' title=''/><author><name>nothingmuch</name><uri>http://www.blogger.com/profile/03975438115490089158</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04344917020781355723'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.woobling.org/2009/11/functional-programming-and-unreasonable.html' ref='tag:blogger.com,1999:blog-876358347971598886.post-7304749074112351943' source='http://www.blogger.com/feeds/876358347971598886/posts/default/7304749074112351943' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-876358347971598886.post-3595571496466514089</id><published>2009-11-20T17:13:30.950+02:00</published><updated>2009-11-20T17:13:30.950+02:00</updated><title type='text'>OK - so for the simple cases it is trivial - we co...</title><content type='html'>OK - so for the simple cases it is trivial - we could have a list of pure and impure operations and then add to the list of impure all subs that use anything impure.  If the editor highlighted for you the impure operations in a different colour - then you&amp;#39;d not make your mistake.  The question is if this is enough to be useful, if your particular case is common enough.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/876358347971598886/7304749074112351943/comments/default/3595571496466514089'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/876358347971598886/7304749074112351943/comments/default/3595571496466514089'/><link rel='alternate' type='text/html' href='http://blog.woobling.org/2009/11/functional-programming-and-unreasonable.html?showComment=1258730010950#c3595571496466514089' title=''/><author><name>zby</name><uri>http://www.blogger.com/profile/04636763782334128869</uri><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.woobling.org/2009/11/functional-programming-and-unreasonable.html' ref='tag:blogger.com,1999:blog-876358347971598886.post-7304749074112351943' source='http://www.blogger.com/feeds/876358347971598886/posts/default/7304749074112351943' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-876358347971598886.post-6210374542107924747</id><published>2009-11-19T19:57:41.188+02:00</published><updated>2009-11-19T19:57:41.188+02:00</updated><title type='text'>@zby - statically inferring that a subroutine is p...</title><content type='html'>@zby - statically inferring that a subroutine is purely functional is trivial for the simple case - just prove it has no impure opcodes.&lt;br /&gt;&lt;br /&gt;The problem is knowing which opcodes are pure and which are impure.&lt;br /&gt;&lt;br /&gt;For example it turns out that matching a regex is impure because it&amp;#39;s nonreentrant, but I never would have expected that since all of the input parameters are provided for it lexically in the Int validator.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/876358347971598886/7304749074112351943/comments/default/6210374542107924747'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/876358347971598886/7304749074112351943/comments/default/6210374542107924747'/><link rel='alternate' type='text/html' href='http://blog.woobling.org/2009/11/functional-programming-and-unreasonable.html?showComment=1258653461188#c6210374542107924747' title=''/><author><name>nothingmuch</name><uri>http://www.blogger.com/profile/03975438115490089158</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04344917020781355723'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.woobling.org/2009/11/functional-programming-and-unreasonable.html' ref='tag:blogger.com,1999:blog-876358347971598886.post-7304749074112351943' source='http://www.blogger.com/feeds/876358347971598886/posts/default/7304749074112351943' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-876358347971598886.post-5610245622368851288</id><published>2009-11-19T19:17:08.738+02:00</published><updated>2009-11-19T19:17:08.738+02:00</updated><title type='text'>Purely functional does not imply that the language...</title><content type='html'>Purely functional does not imply that the language restricts to that, I write purely functional Perl every day, and it&amp;#39;s about as impure as you can get.&lt;br /&gt;&lt;br /&gt;The point of the post is that purely functional components, regardles of whether or not they are written in a purely functional language are in generall more composable and reusable.&lt;br /&gt;&lt;br /&gt;Ironically, while Git is implemented mostly in C it uses a largely purely functional model (everything but references is immutable), whereas darcs initially chose a mutable data model, which was part of the issues that plagued version 1. Git (at it&amp;#39;s core) is much more pure than darcs.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/876358347971598886/7304749074112351943/comments/default/5610245622368851288'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/876358347971598886/7304749074112351943/comments/default/5610245622368851288'/><link rel='alternate' type='text/html' href='http://blog.woobling.org/2009/11/functional-programming-and-unreasonable.html?showComment=1258651028738#c5610245622368851288' title=''/><author><name>nothingmuch</name><uri>http://www.blogger.com/profile/03975438115490089158</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04344917020781355723'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.woobling.org/2009/11/functional-programming-and-unreasonable.html' ref='tag:blogger.com,1999:blog-876358347971598886.post-7304749074112351943' source='http://www.blogger.com/feeds/876358347971598886/posts/default/7304749074112351943' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-876358347971598886.post-4380154560422458269</id><published>2009-11-19T18:18:29.417+02:00</published><updated>2009-11-19T18:18:29.417+02:00</updated><title type='text'>dunno why i'm bothering to respond to a typical jd...</title><content type='html'>dunno why i&amp;#39;m bothering to respond to a typical jdh troll but here it goes -- erlang is indeed purely functional (i.e. there is no mutation) and the problems with darcs (which is still quite popular, actually, and actively maintained, and whose standout problems have been fixed) were with regards to the time taken by certain algorithms, not with regards to anything else.&lt;br /&gt;&lt;br /&gt;And jdh has absolutely no grounding for his last statement at all -- one can write perfectly nice purely functional code in ocaml or f# or what have you, and its just plain silly to say that avoiding side-effects somehow can &amp;quot;introduce bugs&amp;quot;.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/876358347971598886/7304749074112351943/comments/default/4380154560422458269'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/876358347971598886/7304749074112351943/comments/default/4380154560422458269'/><link rel='alternate' type='text/html' href='http://blog.woobling.org/2009/11/functional-programming-and-unreasonable.html?showComment=1258647509417#c4380154560422458269' title=''/><author><name>Sterling</name><uri>http://www.blogger.com/profile/09247125866499343326</uri><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.woobling.org/2009/11/functional-programming-and-unreasonable.html' ref='tag:blogger.com,1999:blog-876358347971598886.post-7304749074112351943' source='http://www.blogger.com/feeds/876358347971598886/posts/default/7304749074112351943' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-876358347971598886.post-3348735184475548650</id><published>2009-11-19T16:42:32.843+02:00</published><updated>2009-11-19T16:42:32.843+02:00</updated><title type='text'>"Another reason I like it so much is that purely f...</title><content type='html'>&amp;quot;Another reason I like it so much is that purely functional software tends to be more reliable. Joe Armstrong of Erlang fame makes that point in an excellent talk much better than I could ever hope to.&amp;quot;&lt;br /&gt;&lt;br /&gt;On the contrary, Erlang is reliable but not purely functional and, in fact, the only software ever written entirely in a purely functional language (Darcs, written in Haskell) and that garnered a significant user base (of only a few thousand users) was subsequently dropped by those users precisely because it was plagued with reliability (and performance) problems.&lt;br /&gt;&lt;br /&gt;In reality, trying to use purely functional programming to solve many real problems introduces more bugs than it catches.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/876358347971598886/7304749074112351943/comments/default/3348735184475548650'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/876358347971598886/7304749074112351943/comments/default/3348735184475548650'/><link rel='alternate' type='text/html' href='http://blog.woobling.org/2009/11/functional-programming-and-unreasonable.html?showComment=1258641752843#c3348735184475548650' title=''/><author><name>Flying Frog Consultancy Ltd.</name><uri>http://www.blogger.com/profile/11059316496121100950</uri><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.woobling.org/2009/11/functional-programming-and-unreasonable.html' ref='tag:blogger.com,1999:blog-876358347971598886.post-7304749074112351943' source='http://www.blogger.com/feeds/876358347971598886/posts/default/7304749074112351943' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-876358347971598886.post-5681417287154312282</id><published>2009-11-19T13:14:28.551+02:00</published><updated>2009-11-19T13:14:28.551+02:00</updated><title type='text'>This is probably a pie in the sky - but wouldn't i...</title><content type='html'>This is probably a pie in the sky - but wouldn&amp;#39;t it be nice if it was possible to declare a sub as purely functional?  Then the parser would check if there is any call to anything unsafe.  It would have to be over-restrictive and not all purely functional code could be declared as such - but I think it could work for a class of subs.  In a way it would work for subs as taint works for vars.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/876358347971598886/7304749074112351943/comments/default/5681417287154312282'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/876358347971598886/7304749074112351943/comments/default/5681417287154312282'/><link rel='alternate' type='text/html' href='http://blog.woobling.org/2009/11/functional-programming-and-unreasonable.html?showComment=1258629268551#c5681417287154312282' title=''/><author><name>zby</name><uri>http://www.blogger.com/profile/04636763782334128869</uri><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.woobling.org/2009/11/functional-programming-and-unreasonable.html' ref='tag:blogger.com,1999:blog-876358347971598886.post-7304749074112351943' source='http://www.blogger.com/feeds/876358347971598886/posts/default/7304749074112351943' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-876358347971598886.post-65137308085695349</id><published>2009-11-19T07:11:47.268+02:00</published><updated>2009-11-19T07:11:47.268+02:00</updated><title type='text'>my solution was pushing [ $thunk_coderef, $^N ] an...</title><content type='html'>my solution was pushing [ $thunk_coderef, $^N ] and then applying all of those after the match finished</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/876358347971598886/7304749074112351943/comments/default/65137308085695349'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/876358347971598886/7304749074112351943/comments/default/65137308085695349'/><link rel='alternate' type='text/html' href='http://blog.woobling.org/2009/11/functional-programming-and-unreasonable.html?showComment=1258607507268#c65137308085695349' title=''/><author><name>nothingmuch</name><uri>http://www.blogger.com/profile/03975438115490089158</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='04344917020781355723'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.woobling.org/2009/11/functional-programming-and-unreasonable.html' ref='tag:blogger.com,1999:blog-876358347971598886.post-7304749074112351943' source='http://www.blogger.com/feeds/876358347971598886/posts/default/7304749074112351943' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-876358347971598886.post-651578141826755232</id><published>2009-11-19T07:09:05.974+02:00</published><updated>2009-11-19T07:09:05.974+02:00</updated><title type='text'>In a former life I wrote Regexp::Approx at http://...</title><content type='html'>In a former life I wrote Regexp::Approx at http://perlmonks.org/?node_id=306474 which forks off another interpreter to run reentrant regexp code. :-(</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/876358347971598886/7304749074112351943/comments/default/651578141826755232'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/876358347971598886/7304749074112351943/comments/default/651578141826755232'/><link rel='alternate' type='text/html' href='http://blog.woobling.org/2009/11/functional-programming-and-unreasonable.html?showComment=1258607345974#c651578141826755232' title=''/><author><name>jjore</name><uri>http://www.blogger.com/profile/11422486876802994595</uri><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.woobling.org/2009/11/functional-programming-and-unreasonable.html' ref='tag:blogger.com,1999:blog-876358347971598886.post-7304749074112351943' source='http://www.blogger.com/feeds/876358347971598886/posts/default/7304749074112351943' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-876358347971598886.post-8720127023929804483</id><published>2009-11-19T02:20:43.483+02:00</published><updated>2009-11-19T02:20:43.483+02:00</updated><title type='text'>I ran into this exact same problem two weeks ago, ...</title><content type='html'>I ran into this exact same problem two weeks ago, though not in moose - I was trying to be clever and got bitten by my *own* code.&lt;br /&gt;&lt;br /&gt;This sort of issue is a good illustration of your point about functional and re-entrant code... though I hope the average reader sees that and not &amp;quot;omg the perl regex engine is bad!!1!&amp;quot; To be fair, I would want to point out that the regex docs are pretty clear that the (?{}) and (??{}) constructs are dangerous and experimental... and non-reentrant! :-)</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/876358347971598886/7304749074112351943/comments/default/8720127023929804483'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/876358347971598886/7304749074112351943/comments/default/8720127023929804483'/><link rel='alternate' type='text/html' href='http://blog.woobling.org/2009/11/functional-programming-and-unreasonable.html?showComment=1258590043483#c8720127023929804483' title=''/><author><name>Hercynium</name><uri>http://stephen.scaffidi.name/</uri><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://blog.woobling.org/2009/11/functional-programming-and-unreasonable.html' ref='tag:blogger.com,1999:blog-876358347971598886.post-7304749074112351943' source='http://www.blogger.com/feeds/876358347971598886/posts/default/7304749074112351943' type='text/html'/></entry></feed>