use strict;
use Fcntl ':flock'; # Import LOCK_* constants
# We will use this file path in error messages and function calls.
# Don't type it out more than once in your code. Use a variable.
my $file = '/path/to/some/file';
# Open the file for appending. Note the file path is in quoted
# in the error message. This helps debug situations where you
# have a stray space at the start or end of the path.
open(my $fh, '>>', $file) or die "Could not open '$file' - $!";
# Get exclusive lock (will block until it does)
flock($fh, LOCK_EX);
# Do something with the file here...
# Do NOT use flock() to unlock the file if you wrote to the
# file in the "do something" section above. This could create
# a race condition. The close() call below will unlock it
# for you, but only after writing any buffered data.
# In a world of buffered i/o, some or all of your data will not
# be written until close() completes. Always, always, ALWAYS
# check the return value on close()!
close($fh) or die "Could not write '$file' - $!";
Статическая типизация не исключает макросы. Например, язык Boo со статической типизацией имеет макросы . То же самое и с Nemerle .
Однако это зависит от того, что Грэм подразумевает под «истинными» макросами. Возможно, макросы Boo и Nemerle «ложны» по его стандартам.
На самом деле неверно, что статическая типизация исключает макросы, но обычно это означает, что макросистема должна быть более сложной чем привычные многим негигиеничные макросы подстановки текста. Я не совсем уверен, что здесь пытается понять Грэм, или что он подразумевает под «истинными» макросами.
См. эту статью , где можно найти один вариант гигиенических макросов в статически типизированном контексте. 1252] (Кстати, я также не согласен с тем, что ни один язык не стоит использовать, если в нем нет макросов.
Конечно, Haskell, но на самом деле все следующее действительно изменило мои взгляды:
Я начал с GWBasic много лет назад, когда был ребенком, поэтому я естественным образом тяготел к процедурным языкам.
Моя карьера началась с C ++, и это фундамент, на котором я строю.