[erlang-questions] binary:compile_pattern - I'm very confused!

Steve Vinoski <>
Fri Feb 8 23:36:17 CET 2013


On Fri, Feb 8, 2013 at 5:09 PM, Steve Strong <> 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/20130208/664615a7/attachment.html>


More information about the erlang-questions mailing list