What is the difference between @(posedge clk) begin end.... and @(posedge clk);?

You are not allowed to use a @(posedge CLK) unless you are in a procedural
block.

So I guess your question Something like below:

What is the difference between

always@(posedge CLK) begin
/* Some code */
end

and

always begin
@(posedge CLK);
/* Some code */
end

As far as I know there is no behavioral difference between these.
But your synthesizer might not like the last example.

Also,
always@(posedge CLK) is used to describe a D-Flip Flop, while @(posedge
CLK); is used in testbench.

For example,
c = d;
@(posedge CLK);
a = b;

means a = b; will not be executed until there is a posedge CLK(i.e. at
the posedge CLK time slot, simulator will execute a = b) .

Best Regards,
Chetan Shah
Sr. ASIC Verification Engineer

Product Engineering Services
Software | Embedded | Semiconductor
www.einfochips.com
Frost & Sullivan Company of the Year 2013-14