How to measure time difference between 2 signal changes in verilog?
The code you wrote should work. The only possible problem is that you should use $realtime instead of $time if the current timescale is greater than 1ms. That prevents time from being rounded to an integer.

I can rearrange the begin/end blocks to better explain how it executes.

   always begin
       @(negedge sig) // wait for sig to goto 0
       sig_low = $realtime ;
       @(enable)      // wait for enable to change its value
       toggletime= $realtime - sig_low ;
    end


This is functionally equivalent to what you wrote.