<div dir="ltr"><div><div><div><a href="http://www.erlang.org/doc/efficiency_guide/binaryhandling.html">http://www.erlang.org/doc/efficiency_guide/binaryhandling.html</a><br><br></div>In section 4.1: A <strong>sub binary</strong>
    is created by <span class="">split_binary/2</span> and when
    a binary is matched out in a binary pattern. A sub binary is a reference
    into a part of another binary (refc or heap binary, never into a another
    sub binary). Therefore, matching out a binary is relatively cheap because
    the actual binary data is never copied.<br><br></div>So hopefully it is cheap. I also hate the beginning <<>>, so annoying. I have code in tons of places that removes it.<br></div>/cjk<br></div><div class="gmail_extra">
<br><br><div class="gmail_quote">On Thu, Dec 5, 2013 at 1:41 PM, Robert Virding <span dir="ltr"><<a href="mailto:robert.virding@erlang-solutions.com" target="_blank">robert.virding@erlang-solutions.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">A follow up question is whether and when the splits create new binaries. So if the input to split is a binary and the outputs are also binary are they completely new binaries or just references into the old binary sharing the actual binary data?<br>

<span class="HOEnZb"><font color="#888888"><br>
Robert<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
----- Original Message -----<br>
> From: "Robert Virding" <<a href="mailto:robert.virding@erlang-solutions.com">robert.virding@erlang-solutions.com</a>><br>
><br>
> These two functions allow you give a pattern to split binaries (and lists in<br>
> re) into a list of sub binaries. If the split pattern occurs at the<br>
> beginning or end of the binary then you get empty parts at the beginning or<br>
> end. So:<br>
><br>
> binary:split(<<" abc def ghi ">>, <<" ">>, [global]) ==><br>
>     [<<>>,<<"abc">>,<<"def">>,<<"ghi">>,<<>>]<br>
><br>
> This is fine and logical. Often you don't want these empty parts so there is<br>
> a 'trim' options which removes them. But it only trims at the end and not at<br>
> the beginning. So:<br>
><br>
> binary:split(<<" abc def ghi ">>, <<" ">>, [global,trim]) ==><br>
>     [<<>>,<<"abc">>,<<"def">>,<<"ghi">>]<br>
><br>
> This is stupid! Saying it it done like this Perl is hardly a good excuse for<br>
> bad behaviour.<br>
><br>
> Sigh,<br>
> Robert<br>
> _______________________________________________<br>
> erlang-questions mailing list<br>
> <a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
> <a href="http://erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
><br>
_______________________________________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
</div></div></blockquote></div><br></div>