BTW: I found another situation where defvar could/should not be
replaced
dy defconst nor defcustom: When some information has to be stored
internally from function call to function call (like the kill-ring and
search-ring). In OO-terms one can think of them as private members.
defvar is public. If you want a private variable binding, use let.
(defun print-my-private-word ()
(print my-private-word))
(let ((my-private-word 'hello))
(print-my-private-word))
==> hello
(print-my-private-word)
==> (void-variable private-word)