All makes sense, although for know I'll continue do describe it as evilness ;)
Cheers,
Steve
--
Steve Strong
Sent with Sparrow (http://www.sparrowmailapp.com/?sig)
On Friday, 8 February 2013 at 23:36, Steve Vinoski wrote:
>>> On Fri, Feb 8, 2013 at 5:09 PM, Steve Strong < (mailto:)> wrote:
> > Hi,
> >
> > I've got a binary split that I'm doing fairly regularly, so I wanted to use a compiled pattern to make it more efficient. I don't have any state floating around (it's very much a utility function), so my plan was to compile the pattern in an erl shell and just paste the resultant term directly into my source code (with an appropriate comment!). However, things are not as they seem:
> >
> > Erlang R15B02 (erts-5.9.2) [source] [smp:8:8] [async-threads:0] [hipe] [kernel-poll:false]
> >
> > Eshell V5.9.2 (abort with ^G)
> > 1> C = binary:compile_pattern(<<0,0,1,0>>).
> > {bm,<<>>}
> >
> >
>>> On the Erlang binary module man page (http://www.erlang.org/doc/man/binary.html) it describes the return value of compile_pattern as follows:
>> "Opaque data-type representing a compiled search-pattern. Guaranteed to be a tuple() to allow programs to distinguish it from non precompiled search patterns."
>> The binary:compile_pattern function is a BIF that creates a "magic binary", much like the resources one can create in a NIF, and these appear as empty binaries in Erlang code as you can see in your shell output, but they're really opaque data types. Because of this, your approach won't work because the subsequent functions you're calling think you're passing an actual empty binary instead of the required opaque type.
>> --steve
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20130211/06837af9/attachment.html>