use interface to represent arguments with format --flag=value
diff --git a/parser.go b/parser.go
index 03ccb76..d342561 100644
--- a/parser.go
+++ b/parser.go
@@ -26,14 +26,35 @@
 
 	// UnknownOptionsHandler is a function which gets called when the parser
 	// encounters an unknown option. The function receives the unknown option
-	// name, its value if specified with '=', and the remaining command line arguments.
+	// name, an Argument which specifies its value if set with '=', and the
+	// remaining command line arguments.
 	// It should return a new list of remaining arguments to continue parsing,
 	// or an error to indicate a parse failure.
-	UnknownOptionHandler func(option string, val *string, args []string) ([]string, error)
+	UnknownOptionHandler func(option string, arg Argument, args []string) ([]string, error)
 
 	internalError error
 }
 
+// Argument represents the value of an option that was passed on the command
+// line in the form "--flagName=value".
+type Argument interface {
+	// String returns the option's value as a string, and a boolean indicating
+	// if the option was present.
+	String() (string, bool)
+}
+
+type strArgument struct {
+	value *string
+}
+
+func (s strArgument) String() (string, bool) {
+	if s.value == nil {
+		return "", false
+	}
+
+	return *s.value, true
+}
+
 // Options provides parser options that change the behavior of the option
 // parser.
 type Options uint
@@ -219,7 +240,7 @@
 			if ignoreUnknown {
 				s.addArgs(arg)
 			} else if p.UnknownOptionHandler != nil {
-				modifiedArgs, err := p.UnknownOptionHandler(optname, argument, s.args)
+				modifiedArgs, err := p.UnknownOptionHandler(optname, strArgument{argument}, s.args)
 
 				if err != nil {
 					s.err = err
diff --git a/parser_test.go b/parser_test.go
index 325bc35..020e575 100644
--- a/parser_test.go
+++ b/parser_test.go
@@ -372,10 +372,10 @@
 	var unknownFlag3 string
 
 	// Set up a callback to intercept unknown options during parsing
-	p.UnknownOptionHandler = func(option string, argument *string, args []string) ([]string, error) {
+	p.UnknownOptionHandler = func(option string, arg Argument, args []string) ([]string, error) {
 		if option == "unknownFlag1" {
-			if argument != nil {
-				unknownFlag1 = *argument
+			if argValue, ok := arg.String(); ok {
+				unknownFlag1 = argValue
 				return args, nil
 			}
 			// consume a value from remaining args list
@@ -386,8 +386,8 @@
 			unknownFlag2 = true
 			return args, nil
 		} else if option == "unknownFlag3" {
-			if argument != nil {
-				unknownFlag3 = *argument
+			if argValue, ok := arg.String(); ok {
+				unknownFlag3 = argValue
 				return args, nil
 			}
 			// consume a value from remaining args list