Binary guards problem

Bjorn Gustavsson bjorn@REDACTED
Mon Oct 23 15:15:38 CEST 2000


Luke Gorrie <luke@REDACTED> writes:

> Bjorn Gustavsson <bjorn@REDACTED> writes:
> 
> > Yes, I would like to see the code that reproduces the error.
> 
> Here is a better example:
> 
>   Eshell V5.0.1  (abort with ^G)
>   1> A = <<1, 2, 3>>.
>   <<1,2,3>>
>   2> B = <<4, 5, 6>>.
>   <<4,5,6>>
>   3> <<A, B>> = <<1, 2, 3, 4, 5, 6>>.
>   ** exited: {{badmatch,<<1,2,3,4,5,6>>},[{erl_eval,expr,3}]} **

Equvivalent to

	<<A:8/integer, B:8/integer>> = <<1, 2, 3, 4, 5, 6>>

>   4> <<A/binary, B/binary>> = <<1, 2, 3, 4, 5, 6>>.
>   ** exited: {{badmatch,<<1,2,3,4,5,6>>},[{erl_eval,expr,3}]} **

If you would have used unbound variables, you would have got:

    A = <<1, 2, 3, 4, 5, 6>>
    B = <<>>

Since A and B were bound, what will be matched is

	<<1, 2, 3>> = <<1, 2, 3, 4, 5, 6>>

You must write

	Sz = size(A).

	<<A:Sz/binary, B/binary>> = <<1,2,3,4,5,6>>.

to get the result you want.

>   5> <<A/binary, B/binary>> == <<1, 2, 3, 4, 5, 6>>.
>   true
> 

/Björn
-- 
Björn Gustavsson            Ericsson Utvecklings AB
bjorn@REDACTED      ÄT2/UAB/F/P
			    BOX 1505
+46 8 727 56 87 	    125 25 Älvsjö



More information about the erlang-questions mailing list